从SQL Server列中删除文本短语

时间:2017-04-14 17:11:34

标签: sql sql-server sql-server-2014

我想更改字符串:

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] =

有人可以帮忙吗?

1 个答案:

答案 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,'')

拆分字符串参考: