2016-02-09 77 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) 
相關問題