最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。



1、取一个字段中的数字
http://bbs.csdn.net/topics/390647599


有一个字段是VARCHAR类型,其中包含了很多字符。但这些字符中有些是汉字,有些是数字,有些是一些特殊字符比如全角的括号'()'也有半角的括号'()'也有'/','-' 等,我想的是只留下数字,比如:(XX)123455那么就只保留123455
比如:中123455只保留123455
是否可以用ASCII码来进行比较,有没有好的算法,或者其他方案。


我的写法:

;with t as ( select '(xx)1234' v union all select 'xx1234xyz' v union all select '1234' )  select case when patindex('%[^0-9]%',v) = 0                  then v             else LEFT(v,patindex('%[^0-9]%',v)-1)        end as v from  ( select stuff(v,1,patindex('%[0-9]%',v)-1,'') as v               from t )t