如何为SQL Server中的字符串中的每个字符添加逗号和单引号?

时间:2017-04-27 00:31:06

标签: sql sql-server

我有这个:

declare @data varchar = 'UI'

我需要解决这个问题,以便它能够与" IN"言。

'UI' => 'U','I'

很难完成这项工作。有人在乎帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用与Stuff()和XML一起使用的临时计数表。

示例

declare @data varchar(max) = 'UI'

Select S = Stuff((Select ',' +S
    From (
            Select S=''''+substring(@data,N,1)+''''
             From (Select Top (Len(@data)) N=Row_Number() Over (Order By (Select null)) From master..spt_values ) N
        ) B1
    For XML Path ('')),1,1,'') 

<强>返回

'U','I'

编辑如果您对UDF开放

Select S = Stuff((Select ',''' +RetVal + ''''
 From (Select * From [dbo].[udf-Str-Parse-Char](@data)) A 
 For XML Path ('')),1,1,'') 

UDF

CREATE FUNCTION [dbo].[udf-Str-Parse-Char] (@String varchar(max))
Returns Table
As
Return (
    with   cte1(N) As (Select 1 From (Values(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) N(N)),
           cte2(N) As (Select Top (IsNull(DataLength(@String),0)) Row_Number() over (Order By (Select NULL)) From cte1 a,cte1 b,cte1 c,cte1 d,cte1 e,cte1 f)

    Select RetSeq=N
          ,RetVal=Substring(@String,N,1) 
     From  cte2
) 
--Max 1 Million Observations
--Select * from [dbo].[udf-Str-Parse-Char]('this is a string') 

答案 1 :(得分:0)

简单方法:

declare @data varchar = 'UI'
select '''' + @data + ''''

在IN语句中使用它:

DECLARE @this_Command varchar(1000)
set @this_Command = 'select * from yourtable where column1 in(''' + @data + ''')'
exec(@this_Command);

答案 2 :(得分:0)

来自@JohnCappelletti的答案对你很有帮助,但除非我遗漏了什么,否则我无法帮助,但觉得有更简单的方法。

declare @data varchar = 'UI'

Select * from t
where charindex(field,@data)>0

如果where匹配true参数中的任何字符,则此field子句将评估为@data。有一个边缘情况可能会导致问题:如果field并不总是单个字符,那么charindex 可以给你一个多字符匹配,这可以通过@JohnCappelletti的答案来避免。如果这是一个相关的问题,你可以这样做:

Select * from t
where charindex(field,@data)>0 AND
len(field)=1

如果您知道@data不会包含任何“特殊”字符(例如]^),那么您可以使用{{1}并且会按如下方式执行:

like

如果Select * from t where field like '[' + @data + ']' 匹配like参数中的任何字符,true将评估为field。如果你想这样做,你可以(或可能)在那里有特殊字符,你需要先逃避这些字符。

鉴于此,我通常会选择@data方法。 charindex的效率也往往低于其他函数,尽管在这种情况下,其他函数会比我更清楚。