我在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%'
感谢。
答案 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 |
+-------------------------------------------------------+--------+