如何根据日期对SQL Server中的多个列进行排序
Posted
技术标签:
【中文标题】如何根据日期对SQL Server中的多个列进行排序【英文标题】:How to sort multiple columns in SQL Server according to the date 【发布时间】:2016-02-09 23:37:12 【问题描述】:我是 SQL Server 的新手。你能告诉我如何根据年、月、日、时间对这张表进行排序吗?这样我就可以以正确的日期升序显示其他列,例如“NAME”。
我正在使用以下 SQL 查询,但这会以 ascii 字符顺序返回结果:
SELECT *
FROM table_name
WHERE YEAR = '2016'
ORDER BY YEAR, MONTH, DDATE, TIME
不按日期排序。能否请您举例说明如何实现这一目标。
我有一个如下所示的 SQL Server 表:
【问题讨论】:
您需要将年、月、日和时间组合成一个值,例如自纪元以来的儒略日期或分钟数,然后对其进行排序。这是一个计算器http://aa.usno.navy.mil/data/docs/JulianDate.php
月份部分把你搞砸了;三月应该是 3,四月应该是 4,等等。正如 Marichyasana 推断的那样,您可以创建一个由这些值串联组成的计算列,例如 20160330、20160304 等。
order by YEAR, MONTH(MONTH+' 1 2000'), DDATE, TIME
或从零件中创建一个 DateTime2 并按该***.com/questions/16298624/… 订购
【参考方案1】:
正如 B. Clay 建议的那样,月份可能没有按照您的想法进行,因为它看起来像是一个 varchar 或类似的,它只是按字母顺序排列。
试试这样的:
SELECT * FROM table_name
where YEAR = '2016' order by
YEAR, DATEPART(MM,MONTH + ' 1 2016'), DDATE, TIME
小提琴:http://sqlfiddle.com/#!6/e345e/9
相关:Convert month name to month number in SQL Server
【讨论】:
感谢 Zoidz 和 zzbomb。将此代码与CONVERT(Int,DDATE), CONVERT(TIME, TIME)
结合后,它运行良好。谢谢你们给我举个例子【参考方案2】:
首先。尽可能只使用一列作为日期。
但在您的情况下,您的列是 VARCHAR 类型。试试这样的。
SELECT * FROM table_name where YEAR = '2016'
order by
CONVERT(Int,YEAR),
(CASE MONTH
WHEN 'January' THEN 1
WHEN 'February' THEN 2
WHEN 'March' THEN 3
WHEN 'April' THEN 4
WHEN 'May' THEN 5
WHEN 'June' THEN 6
WHEN 'July' THEN 7
WHEN 'August' THEN 8
WHEN 'September' THEN 9
WHEN 'October' THEN 10
WHEN 'November' THEN 11
WHEN 'December' THEN 12),
CONVERT(Int,DDATE),
CONVERT(TIME, TIME)
【讨论】:
以上是关于如何根据日期对SQL Server中的多个列进行排序的主要内容,如果未能解决你的问题,请参考以下文章
根据 SQL Server 2008 R2 中特定列中的模式更改对行进行分组
SQL Server,HQL:如何将 SQL Server 日期时间列字段与日期进行比较