如何根据日期

时间:2016-02-09 23:37:12

标签: sql sql-server

我是SQL Server新手。你能否告诉我如何根据年,月,日,时间对这张桌子进行排序?这样我就可以按日期的正确升序显示“NAME”等其他列。

我使用了以下SQL查询,但这会以ascii字符顺序返回结果:

SELECT * 
FROM table_name 
WHERE YEAR = '2016' 
ORDER BY YEAR, MONTH, DDATE, TIME

不按日期排序。你能告诉我一个如何实现这个目标的例子。

我有一个如下所示的SQL Server表:

enter image description here

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

首先。只要有可能,您应该只使用一列作为日期。

但在您的情况下,您的列是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)