SQL Server技术问询:查找以ukinvoice开头且结尾数值>00030的字符串
在SQL Server中筛选符合特定格式的字符串
针对你要找的以ukinvoice开头、且结尾数值部分大于00030的字符串,我整理了几种可行的SQL写法,适配不同场景:
基础写法(假设结尾数值为纯数字)
如果你的目标字符串结构类似示例ukinvoice1245345.inv.1245788945.3.00030,最后一段是固定的数值部分,可以通过字符串函数提取并比较:
SELECT your_column FROM your_table WHERE -- 确保字符串以ukinvoice开头 your_column LIKE 'ukinvoice%' -- 提取最后一段数值转成整数,判断是否大于30(00030转整数就是30) AND CAST(RIGHT(your_column, CHARINDEX('.', REVERSE(your_column)) - 1) AS INT) > 30;
代码说明:
your_column LIKE 'ukinvoice%':快速匹配所有以ukinvoice开头的字符串,%通配符匹配任意后续内容。REVERSE(your_column):反转字符串,让原字符串最后一个.变成第一个.,方便定位结尾数值的位置。CHARINDEX('.', REVERSE(your_column)):找到反转后第一个.的索引,对应原字符串最后一个.的位置。RIGHT(your_column, ... -1):截取最后一个.后面的内容,也就是我们要的结尾数值。CAST(...) AS INT:把数值字符串转成整数,前导零不会影响比较结果(比如00031转整数是31,大于30)。
容错写法(避免非数字结尾报错)
如果数据里可能存在结尾不是纯数字的情况,建议用TRY_CAST替代CAST,转换失败时会返回NULL,不会导致查询报错:
SELECT your_column FROM your_table WHERE your_column LIKE 'ukinvoice%' AND TRY_CAST(RIGHT(your_column, CHARINDEX('.', REVERSE(your_column)) - 1) AS INT) > 30;
简化写法(结尾数值固定5位)
如果你能确定结尾数值一定是5位(比如示例里的00030),可以直接用字符串比较,写法更简洁:
SELECT your_column FROM your_table WHERE your_column LIKE 'ukinvoice%' AND RIGHT(your_column, 5) > '00030';
这种方式直接取最后5个字符和00030做字符串比较,因为都是5位,字符串比较结果和数值比较一致(比如00031 > 00030,00029 < 00030)。
内容的提问来源于stack exchange,提问作者satya
相关产品推荐
相关产品推荐

