在SQL查询中用“”分隔字符串

时间:2014-02-11 09:28:55

标签: sql-server tsql

有一个字符串是''CNY','THB','USD','VND'“来自编码。

有什么方法可以把它分成'CNY','THB','USD','VND',因为我在做一个IN声明。它不能用“'CNY','THB','USD','VND'”来完成。

3 个答案:

答案 0 :(得分:2)

如果您使用的是Microsoft SQL,则可以使用此功能。它将返回一个表,在您的情况下,您可以轻松指定相关字符串是否在此表的结果集中。我告诉你如何在

下面使用它
create FUNCTION [dbo].[SPLITSTRING]
(
@CSV varchar(max),
@Delimiter char(1)
)
RETURNS
@Split TABLE (Id int identity(1,1),[OutParam] varchar(max))
AS
BEGIN
Declare @Len as int, @Pos1 int, @Pos2 int
IF LTRIM(RTRIM(@CSV)) = ''
RETURN
SELECT @CSV = @Delimiter + @CSV + @Delimiter
select @Len = len(@csv), @Pos1 = 1


While @Pos1 < @Len
Begin
select @Pos2 = charindex(@Delimiter,@CSV,@Pos1 + 1)
insert @Split select ltrim(rtrim(substring(@csv, @Pos1+1, @Pos2 - @pos1 -1)))
select @Pos1 = @Pos2
End
RETURN
END

然后做

select * from [dbo].[SPLITSTRING]('CNY,THB,USD,VND',',')

我正在做的是创建一个表,并在“,”之间拆分字符串,然后返回一个表。

答案 1 :(得分:0)

从上面回答,不需要单引号。将字符串传递为'CNY,THB,USD,VND'

查询中的

Where Varchar_Field IN (select * from [dbo].[SPLITSTRING] ('CNY,THB,USD,VND',','))

答案 2 :(得分:0)

创建表值函数

Create FUNCTION [dbo].[Split]
(
@RowData nvarchar(2000),
@SplitOn nvarchar(5)
)  
RETURNS @RtnValue table 
(
   Data nvarchar(100)
)
AS  
BEGIN 
Declare @Cnt int
Set @Cnt = 1
While (Charindex(@SplitOn,@RowData)>0)
Begin
Insert Into @RtnValue (data)
Select 
Data = ltrim(rtrim(Substring(@RowData,1,Charindex(@SplitOn,@RowData)-1)))  
Set @RowData = Substring(@RowData,Charindex(@SplitOn,@RowData)+1,len(@RowData))  
Set @Cnt = @Cnt + 1  
End
Insert Into @RtnValue (data)
Select Data = ltrim(rtrim(@RowData))
Return
END     

并创建一个您想要使用拆分字符串的表

Declare @SplitString Table
(
SubjectName nvarchar(50)
)  

并调用函数

INSERT INTO @SplitString SELECT * FROM dbo.Split("Your String",'Character from which you want to split')