mysql 匹配

mysql 匹配有多种符号


% 是任意匹配  可以匹配 任意个字符

_  下划线 可以匹配单个字符,之前理解有误, 如: 数据1 : aa  张三   数据2: a  张三    匹配值: “_  张三”   结果  : a  张三      理解:_ 下划线匹配 是以 整个字符串作为匹配的,不是以单个字符作为匹配  ,因为 aa 是两个字符串 ,a是一个,  所以只能匹配到 一个 a  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 中,你可以通过使用 LIKE 操作符来执行基于模式的字符串匹配。LIKE 操作符支持使用 % 通配符来匹配任意数量的字符,以及使用 _ 通配符来匹配单个字符。 例如,如果你想匹配所有以 "abc" 开头的字符串,可以使用以下查询: ``` SELECT * FROM mytable WHERE mycolumn LIKE 'abc%'; ``` 如果你想匹配所有以 "abc" 结尾的字符串,可以使用以下查询: ``` SELECT * FROM mytable WHERE mycolumn LIKE '%abc'; ``` 如果你想匹配所有包含 "abc" 的字符串,可以使用以下查询: ``` SELECT * FROM mytable WHERE mycolumn LIKE '%abc%'; ``` 然而,在 MySQL 中并没有内置的百分比匹配功能。如果你想计算一个字符串与另一个字符串的匹配程度百分比,你需要使用一些外部库或自定义函数来实现。 一个常见的方法是使用 Levenshtein 距离算法来计算两个字符串之间的编辑距离,然后将其归一化为 0 到 1 的范围。你可以在 MySQL 中实现一个自定义函数来计算 Levenshtein 距离,然后在查询中使用它来计算匹配程度百分比。 以下是一个示例 Levenshtein 距离函数的实现: ``` DELIMITER // CREATE FUNCTION levenshtein(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT BEGIN DECLARE s1_len, s2_len, i, j, c, c_temp INT; DECLARE s1_char CHAR; DECLARE cv0, cv1 VARCHAR(255); SET s1_len = CHAR_LENGTH(s1); SET s2_len = CHAR_LENGTH(s2); SET cv1 = REPEAT(CHAR(0), s2_len+1); SET i = 1; WHILE i <= s1_len DO SET s1_char = SUBSTRING(s1, i, 1); SET cv0 = CONCAT(CHAR(i), REPEAT(CHAR(0), s2_len)); SET j = 1; WHILE j <= s2_len DO SET c = IF(s1_char = SUBSTRING(s2, j, 1), 0, 1); SET c_temp = ASCII(SUBSTRING(cv1, j, 1)) + 1; IF c_temp > ASCII(SUBSTRING(cv0, j+1, 1)) THEN SET c_temp = ASCII(SUBSTRING(cv0, j+1, 1)); END IF; IF c_temp > ASCII(SUBSTRING(cv1, j+1, 1)) + 1 THEN SET c_temp = ASCII(SUBSTRING(cv1, j+1, 1)) + 1; END IF; SET cv0 = CONCAT(cv0, CHAR(c_temp)); SET j = j + 1; END WHILE; SET cv1 = cv0; SET i = i + 1; END WHILE; RETURN ASCII(SUBSTRING(cv1, s2_len+1, 1)) / LEAST(s1_len, s2_len); END // DELIMITER ; ``` 该函数使用了动态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值