有一个字符串是''CNY','THB','USD','VND'“来自编码。
有什么方法可以把它分成'CNY','THB','USD','VND',因为我在做一个IN声明。它不能用“'CNY','THB','USD','VND'”来完成。
答案 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')