在论坛中出现的比较难的sql问题:16(取一个字段中的数字)

原文: 在论坛中出现的比较难的sql问题:16(取一个字段中的数字)

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



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


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


我的写法:


  
  
  1. ;with t
  2. as
  3. (
  4. select '(xx)1234' v union all
  5. select 'xx1234xyz' v union all
  6. select '1234'
  7. )
  8. select case when patindex( '%[^0-9]%',v) = 0
  9. then v
  10. else LEFT(v, patindex( '%[^0-9]%',v) -1)
  11. end as v
  12. from
  13. (
  14. select stuff(v, 1, patindex( '%[0-9]%',v) -1, '') as v
  15. from t
  16. )t


猜你喜欢

转载自www.cnblogs.com/lonelyxmas/p/12020014.html