我们已经使用以下函数多年来将传递到存储过程的CSV字符串分开。 (道歉,如果它没有这样做的最现代,优雅的或有效的方法,但它的工作以及为我们的目的)
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20) = ' ')
RETURNS @Strings TABLE
(
position int IDENTITY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
SET @text = LTRIM(RTRIM(@text))
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
在使用它:
select value from dbo.fn_Split('string1,string2,string3',',')
(呵呵,这是BTW的MS SQL Server数据库)
来源
2012-10-25 12:43:49
Ted
退房'EXISTS' –
什么是您的RDBMS? 对于Oracle,您可以使用游标创建PL SQL函数。虽然这可能是一个过度杀伤力。只是一个想法... –
MySQL,Oracle,PostGreSQL,SQL Server?他们都有不同的能力和语法。这是来自您自己的应用程序的查询吗?或者它是在某种查询管理器中完成的?您的值列表是从另一个表/查询派生的吗?等等,等等?请提供更多细节和上下文。 – MatBailie