我的 SQL 服务器中有一个 CSV 字段,其中包含 X 天。
这是一个带有数字的示例(以便于阅读):
1,2,3,4
4,5,1,9
3,6,8,4
我想对每一行进行排序。有没有简单的方法来做到这一点?我想得到以下结果:
1,2,3,4
1,4,5,9
3,4,6,8
谢谢!
该功能在 SQL 语言中不是标准的,在 SQL Server 中也不是现成的。
您可以做的是用任何 .NET 语言编写用户定义函数 (UDF),然后在查询中调用该函数。该函数本身将简单地将一个字符串作为输入,期望一个 CSV 值,并返回该字符串的排序版本。然后,您可以使用该函数查询您的表,如下所示:
SELECT SortedCsv(NumbersOfDays) FROM MyTable
您可以在本文中找到有关在 .NET (C#) 中编写 UDF 的更多信息:http: //www.dotnetspider.com/resources/19679-Creating-User-Defined-Function-Using-Managed-Code.aspx和这个:http ://www.diaryofaninja.com/blog/2010/09/06/hidden-gems-microsoft-sql-net-managed-code-support
祝你好运!
尝试这个
DECLARE @CSV TABLE(RID INT,ID INT,COL_NAME VARCHAR(MAX))
INSERT INTO @CSV(RID,ID,COL_NAME)
SELECT
ROW_NUMBER() OVER(PARTITION BY ID ORDER BY COL_NAME) AS RID
,ID,COL_NAME FROM
(
SELECT ID , Split.a.value('.', 'VARCHAR(100)') AS COL_NAME
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY COL_NAME) AS ID,
CAST ('<M>' + REPLACE(COL_NAME, ',', '</M><M>') + '</M>' AS XML) AS COL_NAME
FROM TABLE_NAME
) AS A CROSS APPLY COL_NAME.nodes ('/M') AS Split(a)
) v
SELECT COL_NAME FROM
(
SELECT DISTINCT C1.ID,
STUFF((SELECT ',' + C2.COL_NAME AS [text()] FROM @CSV C2
WHERE C2.ID = C1.ID FOR XML PATH('')),1,1,'' ) AS COL_NAME
FROM @CSV C1
) RESULT
ORDER BY COL_NAME
将“COL_NAME”和“TABLE_NAME”替换为您的列和表名
我建议您使用像 python 这样的编程语言来读取每一行,对其进行排序,并可选择将其放回 SQL 中。