以下分割功能效果很好。但它改变了我输入的顺序。 请帮助我获得所需的输出。
关于http://www.codeproject.com/Tips/85943/Split-function。
输入
SELECT * from dbo.fnStringSplitter('1,3,2', ',')
预期产出
1
3
2
不是
1
2
3
答案 0 :(得分:1)
您需要使用Order by来获得所需的结果。请尝试更改Split字符串函数,如下所示
试试这种方式
CREATE FUNCTION dbo.Fnstringsplitter (@string NVARCHAR(MAX),
@delimiter VARCHAR(2))
RETURNS @result TABLE(
id INT IDENTITY(1, 1),
split_val NVARCHAR(MAX))
BEGIN
DECLARE @start INT,
@end INT
SELECT @start = 1,
@end = Charindex(@delimiter, @string)
WHILE @start < Len(@string) + 1
BEGIN
IF @end = 0
SET @end = Len(@string) + 1
INSERT INTO @result
(split_val)
VALUES (Substring(@string, @start, @end - @start))
SET @start = @end + 1
SET @end = Charindex(@delimiter, @string, @start)
END
RETURN
END
<强>查询:强>
SELECT split_val
FROM dbo.Fnstringsplitter('1,3,2', ',')
ORDER BY id
注意:这不是分割数据的有效方法。但在你的情况下可靠
答案 1 :(得分:0)
SQL中的数据集本质上是无序的。当您需要显式订单时,您必须明确请求/创建它。这可以使用ORDER BY子句或前端的代码来完成。