我想更改字符串:
UD12679S ASPL 0001362701 BOSCH Lista EAA152325 EAA 254336 ELSTOCK 01179470 KHD 1179470 KHD LRS02664 LUCAS 560004113 PSH 12030287 ROBERT'S
到
UD12679S 0001362701 EAA152325 254336 01179470 1179470 LRS02664 560004113 1203028
所以删除没有任何数字的单词。有人发给我这个请求:
SELECT
string_agg(wyraz, ' ')
FROM
unnest(string_to_array('UD12679S ASPL 0001362701 BOSCH Lista EAA152325 EAA 254336 ELSTOCK 01179470 KHD 1179470 KHD LRS02664 LUCAS 560004113 PSH 12030287 ROBERT''S'::text, ' ')) x(wyraz)
WHERE
wyraz~'[0-9]'
但我对SQL并不擅长,我希望在请求中使用
UPDATE [table]
SET [column] =
有人可以帮忙吗?
答案 0 :(得分:1)
在SQL Server 2016+中,您可以使用string_split()
,在SQL Server 2017+中,您也可以使用string_agg()
。
在2016年之前的SQL Server中,使用Jeff Moden的CSV Splitter表值函数:
使用stuff()
with select ... for xml path ('')
method of string concatenation。
declare @str varchar(8000) = 'UD12679S ASPL 0001362701 BOSCH Lista EAA152325 EAA 254336 ELSTOCK 01179470 KHD 1179470 KHD LRS02664 LUCAS 560004113 PSH 12030287 ROBERT''S';
select stuff (
(
select ' '+s.Item
from dbo.[delimitedsplit8K](@str,' ') s
where s.Item like '%[0-9]%'
order by s.ItemNumber
for xml path (''), type).value('.','nvarchar(max)')
,1,1,'')
rextester 演示:http://rextester.com/TSXC15231
返回:
D12679S 0001362701 EAA152325 254336 01179470 1179470 LRS02664 560004113 12030287
有关表格的更新:
create table t (col varchar(8000))
insert into t values ('UD12679S ASPL 0001362701 BOSCH Lista EAA152325 EAA 254336 ELSTOCK 01179470 KHD 1179470 KHD LRS02664 LUCAS 560004113 PSH 12030287 ROBERT''S')
update t
set col = stuff (
(
select ' '+s.Item
from dbo.[delimitedsplit8K](t.col,' ') s
where s.Item like '%[0-9]%'
order by s.ItemNumber
for xml path (''), type).value('.','nvarchar(max)')
,1,1,'')
拆分字符串参考:
string_split()
in SQL Server 2016 : Follow-Up #1 - Aaron Bertrand string_split()
and string_agg()
- Aaron Bertrand