我的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
谢谢!
答案 0 :(得分:0)
该功能在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
祝你好运!答案 1 :(得分:0)
我建议你使用像python这样的编程语言来读取每一行,对它进行排序,并可选择将它放回到SQL中。
答案 2 :(得分:0)
试试这个
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”替换为列amd表名称