我想将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
但是如何???
答案 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', ';')