SQL Server:仅使用另一列中的数字更新列

时间:2017-05-23 15:28:33

标签: sql sql-server tsql sql-server-2008-r2

我在X列中有一个字符串,其中包含文本和数字的混合。我需要提取这些数字并将它们放入另一列,以便我可以轻松查询它。该字段始终包含ABC和数字,但这些字符可以在字符串中的任何位置,例如,列X可以包括:

 ABC 123456 blah blah 
 ABC 234567 blah 555-01234
 ABC:345678 something else 012
 the quick brown fox jumps over the lazy dog ABC456789

然后我想更新Y列以仅包含第一组数字(不是字符串中的所有数字),所以我期待:

 123456 
 234567
 345678
 456789

可以这样做吗?我已经阅读了有关使用PATINDEX的信息,但我无法解决如何将其纳入更新查询,例如:

update table1 set y = x where x like '%ABC%'

感谢。

1 个答案:

答案 0 :(得分:0)

使用stuff()left()patindex()查找第一组数字的开头和结尾:

update t
  set num = left(stuff(str,1,patindex('%[0123456789]%',str)-1,'')
       , patindex('%[^0123456789]%'
         , stuff(str,1,patindex('%[0123456789]%',str)-1,'')+' ')-1
       )

select * 
from t

rextester演示:http://rextester.com/DUE94933

返回:

+-------------------------------------------------------+--------+
|                          str                          |  num   |
+-------------------------------------------------------+--------+
| ABC 123456 blah blah                                  | 123456 |
| ABC 234567 blah 555-01234                             | 234567 |
| ABC:345678 something else 012                         | 345678 |
| the quick brown fox jumps over the lazy dog ABC456789 | 456789 |
+-------------------------------------------------------+--------+