2016-02-09 44 views
1

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

我用下面的SQL查询,但这次返回结果以ASCII字符顺序:

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

按日期不排序。你可以请示例如何实现这一点。

我有一个看起来像这样的SQL Server表:

enter image description here

+0

您需要将年份,月份,ddate和时间合并为一个单独的值,例如自时代以来的朱利安日期或分钟数并对其进行排序。这是一个计算器'http:// aa.usno.navy.mil/data/docs/JulianDate.php' – Marichyasana

+0

这个月的一部分让你感到困惑; 3月应该是3,4月应该是4,等等。作为Marichyasana推断,你可以创建一个由这些值串联组成的计算列,如20160330,20160304等。 –

+1

'按年份排列,MONTH(MONTH +'1 2000 '),DDATE,TIME或从零件创建DateTime2并按顺序排序http://stackoverflow.com/questions/16298624/get-a-datetime-from-year-day-of-the-year-and- hour-in-sql-server-2008-r2 –

回答

1

为B.克莱建议一个月大概不是做你的想法,因为它看起来像这是一个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所有的

+0

谢谢Zoidz和zzbomb。在用CONVERT(Int,DDATE)梳理这段代码后,CONVERT(TIME,TIME)'运行良好。感谢你们两个给我举个例子 –

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) 
相关问题