如何将split函数放入查询select sql中

时间:2014-01-15 08:48:37

标签: sql sql-server tsql split

我想将split函数放入select

CREATE TABLE #tmp(id INT ,codes VARCHAR(10))


INSERT INTO #tmp(id,codes) VALUES (1,'1;2;3')


SELECT id , BaseSplit(codes,';')  FROM #tmp 

但是如何???

2 个答案:

答案 0 :(得分:2)

你需要使用CROSS APPLY这样的东西......

SELECT  * FROM #tmp
CROSS APPLY dbo.BaseSplit(#tmp.codes, ';') AS htvf

答案 1 :(得分:1)

我不相信您提出的查询会起作用,因为您尝试将记录集作为select的一部分返回。这将抛出 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 如果要拆分作为表值,您可以使用UDF。

这是一个稍微修改过的UDF,最初由Dave Tucker here于2005年发布。

CREATE FUNCTION dbo.Split(@String NVARCHAR(MAX), @Delimiter NVARCHAR(MAX))
RETURNS @Results TABLE (Items NVARCHAR(MAX))
AS
BEGIN
    DECLARE @index INT
    DECLARE @slice NVARCHAR(MAX)

    SELECT @index = 1
    IF @String IS NULL RETURN

    WHILE @index != 0

    BEGIN
        SELECT @index = CHARINDEX(@Delimiter,@String)
        IF @index !=0
        SELECT @slice = LEFT(@String,@index - LEN(@Delimiter))
        ELSE
        SELECT @slice = @String

        INSERT INTO @Results(Items) VALUES(@slice)
        SELECT @String = RIGHT(@String,LEN(@String) - @index)
        IF LEN(@String) = 0 BREAK
    END RETURN
END

用法:

SELECT * FROM dbo.Split('1;2;3', ';')