我在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 |
+-------------------------------------------------------+--------+