SQL技术问询:能否用LIKE运算符匹配字段前两位与另一字段后两位?
当然可以用LIKE实现这个匹配需求!
我直接结合你给的例子(year为1996、phone_number为9655771243的行需要被筛选)来给你讲具体操作——这里应该是要匹配year的最后两位和phone_number的前两位对吧?
核心思路
LIKE是用来匹配字符串模式的,我们可以通过字符串函数提取出需要匹配的部分,再拼接成通配符模式,就能实现这种跨字段的匹配判断。
针对你例子的SQL语句(以MySQL为例)
如果要筛选year的最后两位与phone_number的前两位匹配的行,写法如下:
SELECT * FROM your_table_name WHERE phone_number LIKE CONCAT(RIGHT(year, 2), '%');
RIGHT(year, 2):从year字段末尾截取2个字符,比如1996会得到'96'CONCAT(RIGHT(year, 2), '%'):拼接成'96%'的模式,%代表任意后续字符phone_number LIKE '96%':表示phone_number以96开头,正好对应前两位和year的最后两位一致
如果需求反过来(year的前两位匹配phone_number的后两位)
只需要调整一下匹配模式的拼接方式:
SELECT * FROM your_table_name WHERE year LIKE CONCAT(RIGHT(phone_number, 2), '%');
这里RIGHT(phone_number, 2)取手机号的最后两位,拼接成'XX%'后,year LIKE 'XX%'就表示year以XX开头,也就是前两位和手机号的后两位匹配。
不同数据库的小差异
不同数据库的字符串函数略有区别,比如:
- Oracle用
SUBSTR替代RIGHT:SUBSTR(year, -2)获取year最后两位,拼接用||,语句为phone_number LIKE SUBSTR(year, -2) || '%' - SQL Server支持
RIGHT和CONCAT,用法和MySQL基本一致
额外小建议
其实用直接字符串比对会更直观,比如LEFT(year, 2) = RIGHT(phone_number, 2),但既然你问的是LIKE的可行性,上面的方法完全能满足需求。
内容的提问来源于stack exchange,提问作者Mitaka
相关产品推荐
相关产品推荐

