字符串列去除前导零的高效SQL LIKE查询需求问询
问题说明
数据表结构
Id Number (string) 1 0000231 2 00232 3 231 4 24 5 A1233
查询需求
以可变值23作为查询条件,检索出忽略前导零后以23开头的记录,预期结果如下:
Id Number 1 0000231 2 00232 3 231
当前问题
原EF Core查询代码仅能匹配第3条记录:
Where(c => EF.Functions.Like(c.AIN, $"{filter}%"))
原因是Number列是字符串类型,前导零会干扰匹配,需要在查询时忽略前导零。
高效SQL查询语句
方案1:去除前导零后匹配
SELECT Id, Number FROM 你的表名 WHERE LTRIM(Number, '0') LIKE '23%'
注:不同数据库的语法略有差异:
- SQL Server 直接使用
LTRIM(Number, '0')- MySQL 8.0+ 支持
LTRIM(Number, '0'),低版本可替换为TRIM(LEADING '0' FROM Number)
方案2:兼容全零记录(可选)
如果需要保留全零(如0000)的记录,可调整为:
SELECT Id, Number FROM 你的表名 WHERE (LTRIM(Number, '0') LIKE '23%' OR Number = '0')
不需要的话直接用方案1即可。
补充:EF Core实现方案
最终采用的EF Core代码如下,通过TrimStart('0')去除前导零后再进行LIKE匹配:
.Where(c => EF.Functions.Like(c.AIN.TrimStart('0'), $"{filter}%"))
内容的提问来源于stack exchange,提问作者Lajith
相关产品推荐
相关产品推荐

