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

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

问题描述:

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

declare @data varchar = 'UI' 

我需要解决这一问题,以便它会用“IN”语句工作。

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

很难完成这项工作。任何人都在意帮忙吗?

谢谢!

+0

'LIKE'不会有效吗? –

+0

不幸的是没有。必须是一个陈述 –

+0

没时间写今晚,但这应该让你在正确的方向前进:http://*.com/questions/30782744/split-a-string-with-no-delimiters-into - 列 –

可以在演唱会使用的ad-hoc符合表的东西()和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') 
+0

谢谢,约翰!我选择了你的第一个选择。成功了! –

简单的方法:

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

在声明中这样写:

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

从@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将不包含任何“特殊”字符(如]^),那么你可以使用like会做它如下:

Select * from t 
where field like '[' + @data + ']' 

如果field匹配所有的字符在@data参数的like将评估为true。如果你想这样做,而且你(或可能)在那里有特殊字符,你需要首先逃避那些角色。

鉴于这种情况,我通常选择的charindex方法。like也往往效率低于其他功能,虽然其他功能比我更了解它是否属于这种情况。

+0

“LIKE”问题之一是您必须确定“@ data”不包含任何意外。例如'@data ='^ abc''可能会引起一些意外(就像任何包含''''的东西)。 –

+0

谢谢@Damien_The_Unbeliever。我将包括一个这样的笔记,并忘记。我已经更新了我的答案。 –