我需要帮助从SQL Server表中排序日期并将它们填充到字符串中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我需要帮助从SQL Server表中排序日期并将它们填充到字符串中相关的知识,希望对你有一定的参考价值。
我需要帮助按时间顺序排序日期并将它们填充到字符串中。
我有以下查询:
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
FROM JobScheduleDate
WHERE WorkDate >= '12/26/2017' AND WorkDate <= '01/23/2018'
ORDER BY ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
PRINT @cols
JobScheduleDate表具有以下日期:
12/26/2017
12/27/2017
12/28/2017
12/29/2017
1/1/2018
1/2/2018
1/3/2018
1/4/2018
1/5/2018
1/8/2018
1/9/2018
1/10/2018
1/11/2018
1/12/2018
1/15/2018
1/16/2018
1/17/2018
1/18/2018
1/19/2018
1/22/2018
1/23/2018
我的结果如下:
[1/10/2018],[1/11/2018],[1/12/2018],[1/16/2018],[1/17/2018],[1/18/2018],
1/19/2018],[1/2/2018],[1/22/2018],[1/23/2018],[1/3/2018],[1/4/2018],
[1/5/2018],[1/8/2018],[1/9/2018],[12/26/2017],[12/27/2017],[12/28/2017],[12/29/2017]
答案
最简单的方法是使用ANSI标准格式格式化日期:
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(FORMAT(WorkDate, 'yyyy-M-d', 'en-US'))
FROM JobScheduleDate
WHERE WorkDate >= '2017-12-26' AND WorkDate <= '2018-01-23'
ORDER BY ',' + QUOTENAME(FORMAT(WorkDate, 'yyyy-M-d', 'en-US'))
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1,'');
这将是我的第一个建议。您也可以使用以下格式执行此操作:
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
FROM JobScheduleDate
WHERE WorkDate >= '2017-12-26' AND WorkDate <= '2018-01-23'
GROUP BY ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
ORDER BY MIN(WorkDate)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
这假设WorkDate
是约会。如果它有时间成分,那么使用CAST(WorkDate as date)
作为GROUP BY
和ORDER BY
。
另一答案
试试这样;
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
FROM (select * from JobScheduleDate WHERE WorkDate >= '12/26/2017' AND WorkDate <= '01/23/2018' order by WorkDate) JobScheduleDate
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
您应该从WorkDate ASC
检索有序集合中的数据。
另一答案
只需使用没有字符串格式的workdate
DECLARE @cols AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(FORMAT(WorkDate, 'M/d/yyyy', 'en-US'))
FROM JobScheduleDate
WHERE WorkDate >= '12/26/2017' AND WorkDate <= '01/23/2018'
ORDER BY WorkDate
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
PRINT @cols
以上是关于我需要帮助从SQL Server表中排序日期并将它们填充到字符串中的主要内容,如果未能解决你的问题,请参考以下文章
C# 需要将 sql 中的数据放入 DataGridView 并在行中按日期排序
如何从 sql server 2008 中具有不同 TaskIds 的表中查找日期?
如何从SQL表中选择特定行并在SQL Server中连接多个表?
SQL Server 从当前日期计算天数,不包括另一个表中的天数