获取可以转换的行

标题可能表达的不是很清楚。

我说下这条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 
posted @ 2012-05-31 15:45  水草肃  阅读(141)  评论(0编辑  收藏  举报