繁体   English   中英

在 SQL 中用逗号分割字符串

[英]Split String With Commas in SQL

我正在尝试创建一个动态查询,该查询将允许我在一次变量中具有多个值。 为了做到这一点,我一直在研究以下查询:

DECLARE 
@Variables VARCHAR(MAX) = 'MOVE ON UP,WILD BREAK,PRETWIST',
@Result VARCHAR(MAX)

SET @Result = (SELECT REPLACE(@Variables, ',', '') )
SELECT 
S = STUFF((
SELECT ',' +S
FROM(
        SELECT S= '''' + SUBSTRING(@Result, N, 1) + ''''
         FROM (SELECT TOP (LEN(@Result)) N= ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM master..spt_values ) N
    ) B1
FOR XML PATH ('')),1,1,'')

我的查询给出的输出为:

'M','O','V','E','','O','N','','U','P','W','I','L', 'D','','B','R','E','A','K','P','R','E','T','W','I' ,'英石'

我想要的输出是:

'继续前进'、'狂野突破'、'PRETWIST'

请有人可以帮助我并告诉我我哪里出错了吗?

不是 100% 清楚你的意图,但是......

例子

DECLARE @Variables VARCHAR(MAX) = 'MOVE ON UP,WILD BREAK,PRETWIST'

Select ''''+replace(@Variables,',',''',''')+''''

退货

'MOVE ON UP','WILD BREAK','PRETWIST'

您可以使用 STRING_SPLIT() 函数:

Select
Value
From STRING_SPLIT(@Variables, ',');

这将返回你的话行https://docs.microsoft.com/ru-ru/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15

然后根据需要使用 xml path 或 string_agg 收集它

这是一个 2008+ 兼容的方法,它不需要宏替换或动态 SQL

例子

DECLARE @Variables VARCHAR(MAX) = 'MOVE ON UP,WILD BREAK,PRETWIST'

Select A.*
 From  YourTable A
 Where [SomeCol] in (
                    Select Value = B.i.value('(./text())[1]', 'varchar(max)')
                    From  (Select x = Cast('<x>' + replace(@Variables,',','</x><x>')+'</x>' as xml)) as A 
                    Cross Apply x.nodes('x') AS B(i)
                  )

或者作为 JOIN

DECLARE @Variables VARCHAR(MAX) = 'MOVE ON UP,WILD BREAK,PRETWIST'

Select A.*
 From  YourTable A
 Join  (
        Select Value = B.i.value('(./text())[1]', 'varchar(max)')
        From  (Select x = Cast('<x>' + replace(@Variables,',','</x><x>')+'</x>' as xml)) as A 
        Cross Apply x.nodes('x') AS B(i)
       ) B
 on A.StateCode=B.Value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM