基于VARCHAR字段末尾4/5个字符筛选记录的SQL实现方法
嘿,这个问题我刚好碰到过类似的场景,两种思路都能实现需求,但各有优劣,我给你拆解下:
两种可行的思路
不管是直接匹配末尾字符还是拆分字符串,主流SQL数据库都有对应的函数支持,下面分别说明:
1. 直接匹配字段末尾的字符
因为你的字段格式是「整数/四位整数」,要找以2017结尾的记录,本质上是找**最后五位字符为/2017**的记录(斜杠+四位年份)。这种方法代码简洁,执行效率也不错。
举几个不同数据库的实现示例:
- MySQL/PostgreSQL/SQL Server 通用写法(用
LIKE):SELECT * FROM your_table WHERE your_column LIKE '%/2017'; - 用
RIGHT函数精准匹配末尾5位:-- MySQL/SQL Server SELECT * FROM your_table WHERE RIGHT(your_column, 5) = '/2017'; -- PostgreSQL SELECT * FROM your_table WHERE RIGHT(your_column, 5) = '/2017';
2. 拆分字符串后对比
如果想更严谨地只提取斜杠后的四位整数进行比较,也可以用字符串拆分函数把斜杠后面的部分单独拿出来,再和'2017'对比。这种方法能避免一些格式不规范的误匹配(比如字段是'12342017'这种没有斜杠的情况)。
不同数据库的拆分函数示例:
- MySQL:用
SUBSTRING_INDEX取斜杠右侧的内容SELECT * FROM your_table WHERE SUBSTRING_INDEX(your_column, '/', -1) = '2017'; - SQL Server:结合
REVERSE和CHARINDEX拆分SELECT * FROM your_table WHERE RIGHT(your_column, CHARINDEX('/', REVERSE(your_column)) - 1) = '2017'; - PostgreSQL:用
split_part拆分SELECT * FROM your_table WHERE split_part(your_column, '/', 2) = '2017';
哪种方法更合适?
- 如果你的数据格式非常规范(所有记录都是严格的「整数/四位整数」,没有例外),直接匹配末尾字符的写法更简单,性能也更优;
- 如果担心存在格式不规范的记录(比如少了斜杠、后面多了空格等),拆分字符串的方法更严谨,能确保只筛选出斜杠后是2017的记录。
内容的提问来源于stack exchange,提问作者user7512602
相关产品推荐
相关产品推荐

