1

我的 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

谢谢!

4

3 回答 3

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

祝你好运!

于 2013-04-22T07:33:33.133 回答
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”替换为您的列和表名

于 2013-04-22T10:04:40.203 回答
0

我建议您使用像 python 这样的编程语言来读取每一行,对其进行排序,并可选择将其放回 SQL 中。

于 2013-04-22T07:42:32.727 回答