在sql查询中用逗号分割字符串

时间:2013-03-31 10:26:05

标签: sql split

在SQL中用逗号分割字符串并将它们存储为split_item1,split_item2 和

select column_name from table-name where column_name = 'split_item1' or split_item2'

请发布此

的正确语法

3 个答案:

答案 0 :(得分:1)

假设您使用的是SQL Server,则需要从列的两侧连接,,以便匹配您要搜索的值。

SELECT  *
FROM    TableName
WHERE   ',' + csvColumn + ',' LIKE '%,' + 'split_item1' + ',%' OR
        ',' + csvColumn + ',' LIKE '%,' + 'split_item2' + ',%'

每个dbms上的连接符号都不同,MySQL的CONCAT(),Oracle的||

答案 1 :(得分:0)

您可以使用以下代码(为sqlserver创建)。

Create Function FUN_STRING_SPLIT(@text varchar(max), @separator varchar(10))
Returns @Result Table 
(
   POSITION INT IDENTITY(1,1) NOT NULL, VALUE VARCHAR(max) 
)
As 
Begin
    Declare @ini int = 1, @end int = 0

    While @end <= LEN(@text)
    Begin
        if @end > 0 set @ini = @end + LEN(@separator)
        if @ini > 0 set @end = CHARINDEX(@separator, @text, @ini)
        if @end = 0 set @end = LEN(@text) + 1

        Insert Into @Result (VALUE) Values (SUBSTRING(@text,@ini,@end - @ini))
    End
    Return
End

然后使用:

Select * From FUN_STRING_SPLIT('Word1,Word2,Word2,Etc..', ',');

答案 2 :(得分:0)

从fromSplitStringSep中选择*(&#39; Word1 wordr2 word3&#39;,&#39;&#39;)

CREATE function [dbo].[SplitStringSep] 
    (
        @str nvarchar(4000), 
        @separator char(1)
    )
    returns table
    AS
    return (
        with tokens(p, a, b) AS (
            select 
                1, 
                1, 
                charindex(@separator, @str)
            union all
            select
                p + 1, 
                b + 1, 
                charindex(@separator, @str, b + 1)
            from tokens
            where b > 0
        )
        select
            p-1 zeroBasedOccurance,
            substring(
                @str, 
                a, 
                case when b > 0 then b-a ELSE 4000 end) 
            AS s
        from tokens
      )