2017-04-27 73 views
2

我有這樣的:如何爲SQL Server中的字符串中的每個字符添加逗號和單引號?

declare @data varchar = 'UI' 

我需要解決這一問題,以便它會用「IN」語句工作。

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

很難完成這項工作。任何人都在意幫忙嗎?

謝謝!

+0

'LIKE'不會有效嗎? –

+0

不幸的是沒有。必須是一個陳述 –

+0

沒時間寫今晚,但這應該讓你在正確的方向前進:http://stackoverflow.com/questions/30782744/split-a-string-with-no-delimiters-into - 列 –

回答

3

可以在演唱會使用的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

謝謝,約翰!我選擇了你的第一個選擇。成功了! –

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); 
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將不包含任何「特殊」字符(如]^),那麼你可以使用like會做它如下:

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

如果field匹配所有的字符在@data參數的like將評估爲true。如果你想這樣做,而且你(或可能)在那裏有特殊字符,你需要首先逃避那些角色。

鑑於這種情況,我通常選擇的charindex方法。like也往往效率低於其他功能,雖然其他功能比我更瞭解它是否屬於這種情況。

+0

「LIKE」問題之一是您必須確定「@ data」不包含任何意外。例如'@data ='^ abc''可能會引起一些意外(就像任何包含''''的東西)。 –

+0

謝謝@Damien_The_Unbeliever。我將包括一個這樣的筆記,並忘記。我已經更新了我的答案。 –

相關問題