获取可以转换的行
标题可能表达的不是很清楚。
我说下这条sql的由来,在数据表中存在这么两个字段,一个是做排序用的,另一个是做显示用的。现在显示的值已经有了而排序所要用的值还没有。
但是这里面有一个关系 就是在有一部分的显示是可以决定排序的(显示的值都是数字 恰好排序也根据)。然而另一部分的显示是无法决定排序的。这些只有手动去改了。我们吧 我们能做
的做到就好。
我用的方法比较笨,又其他办法的留言。谢谢。。。
首先我是想直接过滤出那些可以转换成数字的行。但是很不幸 能力不够 没有做到。。。等待高人指点
于是只能想办法要对所有的数据都进行修改的话,对于那些不能转换的数据一定也要指定他们的转换方式。于是就想到了case when 但是case 的条件是什么呢.
好再找到个可以函数是可以带正则的不然我只能去研究sql的用户自定义方法了。。。。。研究中。。。。。。。。。。。。。。。。。。。。。。。
感谢Patindex方法这个方法会返回符合正则参数的首个字符的位置(from 1)eg :select Patindex('%[0-9]%','fsdf465') 这里会返回5 当没找到匹配值的时候就会返回0
所以 sql 中一定会有 case when select Patindex('%[0-9]%','fsdf465')=0 then 0 else ... end 部分 ,那么...是什么呢那就是长度吧 len (字段)
这里不得不说一下
select cast ('' as int)
这个是不会报错的哦
我们开始取需要转换的数据并且吧不需转换(不能转换的数据变成'')
Substring(matchgroupname, 1, CASE WHEN patindex('%[^0-9]%', matchgroupname) = 0 THEN len( matchgroupname) ELSE 0 END
后面就是转换 cast就可以了 最终sql就是这样
UPDATE matchgroup SET DESCid = Cast(Substring(MatchGroupName, 1, CASE WHEN Patindex('%[^0-9]%', MatchGroupName) = 0 THEN Len(MatchGroupName) ELSE 0 END)AS int) WHERE parentid <> 0