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



我在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%'

谢谢。

使用 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 |
+-------------------------------------------------------+--------+

最新更新