sql server 正则简易替代方案
程序员文章站
2022-06-16 12:15:27
要看结果直接最后一行因为sqlserver我看到的正则,需要先自己定义很多东西,对新手来说操作很繁琐,我考虑大部分情况我们只需要用到很简单的匹配,所以想着有没有简单的实现办法我遇到一个问题,一个老系统,数据量很大,而且多种类型数据都在同一个表mmf中(假装有数据类型a、b、c),要筛选出b数据。于是我从b数据的code入手,b数据分为老数据和新数据,新的数据格式统一,2数字+3英文+4数字,比如:72YSD0123。或者出现子类:72YSD0123-2mysql可以直接用正则,但是这个系统是.....
- 要看结果直接最后一行。
- 因为sql server我看到的正则,需要先自己定义很多东西,对新手来说操作很繁琐,我考虑大部分情况我们只需要用到很简单的匹配,所以想着有没有简单的实现办法
- 我遇到一个问题,一个老系统,数据量很大,而且多种类型数据都在同一个表mmf中(假装有数据类型a、b、c),要筛选出b数据。
- 于是我从b数据的code入手,b数据分为老数据和新数据,新的数据格式统一,2数字+3英文+4数字,比如:72YSD0123。 或者出现子类:72YSD0123-2
- mysql可以直接用正则,但是这个系统是sql server,为了替换正则,我第一反应,字符串需要某个字符,就是like,于是where代码如下:
-
select * from mmf where (mmf.code like '2%' or mmf.code like '3%' or mmf.code like '4%' or mmf.code like '5%' or mmf.code like '6%' or mmf.code like '7%' or mmf.code like '8%' or mmf.code like '9%' or mmf.code like '0%' or mmf.code like '1%') and (mmf.code like '%A%' or mmf.code like '%B%' or mmf.code like '%C%' or mmf.code like '%D%' .....) // 这里我直接从A肝到Z,很蠢很萌的写法,23333
-
- 但是遇到了问题,比如826YS123这样的老数据也查出来了,所以下定决心要定位匹配,于是用isnumberc和substring函数判断截取字符串是否是数字
-
select * from mmf where ISNUMERIC(SUBSTRING(mmf.code,1,2)) = 1 and ISNUMERIC(SUBSTRING(mmf.code,3,3)) = 0 and ISNUMERIC(SUBSTRING(mmf.code,6,4)) = 1
-
-
但是又遇到了问题,数据结果23Y123,230S11,这样的数据也出来,也就是这里有两个问题
-
Y12是字符串,0S1也是字符串,不符合我连续3个英文要求
-
某位3这样不足4位,也满足SubString(code,6,4)的判断
-
所以我决定英文需要一个个对比,然后增加长度判定,最后加上小概率出现的子类判断
-
- 最终结果:
select * from mmf // 头两个是数字 where ISNUMERIC(SUBSTRING(mmf.code,1,2)) = 1 // 接下来3个是英文 and ISNUMERIC(SUBSTRING(mmf.code,3,1)) = 0 and ISNUMERIC(SUBSTRING(mmf.code,4,1)) = 0 and ISNUMERIC(SUBSTRING(mmf.code,5,1)) = 0 // 4个数字 and ISNUMERIC(SUBSTRING(mmf.code,6,4)) = 1 // 规范长度是9 and (len(mmf.code) = 9 // 有子类,加了-和1个数字编号 or (len(mmf.code) = 11 and ISNUMERIC(SUBSTRING(mmf.code,10,1)) = 0 and ISNUMERIC(SUBSTRING(mmf.code,11,1)) = 1) )
- 分析结论:正常只需要先截取字符串,然后做判断处理即可
- 截取字符串:SUBSTRING(字符串,从1开始的第几个位置,长度多少)
- 字符串长度:len(mmf.code)
- 是否是数字判断:ISNUMERIC(字符串),是数字为1,不是为0
- 直接用等于判断是否是某个字符
本文地址:https://blog.csdn.net/u013484186/article/details/110945369
推荐阅读
-
SQL Server数据库安装时常见问题解决方案集锦
-
SQL Server多表查询优化方案集锦
-
SQL Server 2005数据库还原错误的经典解决方案
-
SQL Server 2005附加数据库时Read-Only错误的解决方案
-
sql server连接不上怎么办 SQL Server2008R无法登录的解决方案(1814\18456)
-
SQL Server 2005 DTS导入平面数据出现错误解决方案
-
SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)
-
SQL Server2008数据库导入导出兼容性处理方案
-
win2008下安装SQL SERVER 2005出现IIS功能要求 警告解决方案
-
清理SQL Server 2008日志文件Cannot shrink log file 2 的解决方案