如何为SQL Server中的字符串中的每个字符添加逗号和单引号?
我有这样的:如何为SQL Server中的字符串中的每个字符添加逗号和单引号?
declare @data varchar = 'UI'
我需要解决这一问题,以便它会用“IN”语句工作。
'UI' => 'U','I'
很难完成这项工作。任何人都在意帮忙吗?
谢谢!
可以在演唱会使用的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')
谢谢,约翰!我选择了你的第一个选择。成功了! –
简单的方法:
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
也往往效率低于其他功能,虽然其他功能比我更了解它是否属于这种情况。
“LIKE”问题之一是您必须确定“@ data”不包含任何意外。例如'@data ='^ abc''可能会引起一些意外(就像任何包含''''的东西)。 –
谢谢@Damien_The_Unbeliever。我将包括一个这样的笔记,并忘记。我已经更新了我的答案。 –
'LIKE'不会有效吗? –
不幸的是没有。必须是一个陈述 –
没时间写今晚,但这应该让你在正确的方向前进:http://stackoverflow.com/questions/30782744/split-a-string-with-no-delimiters-into - 列 –