2015-10-06 32 views
0

在SQL中,我試圖將日期轉換爲mmm-yy,然後從4月開始進行排序作爲第一個月。到目前爲止,我已成功使用從4月份開始的SQL排序月末(mmm-yy)

SELECT 
    LNAME as Location, 
    SUBSTRING(CONVERT(VARCHAR(11), MonthEnd, 113), 4, 8) AS [MonthEnd], 
    CAST (TYPEDESC as VARCHAR(20)) as 'Factory', 
    Sum(Tonnes) as Tonnes 
FROM (
    SELECT   
     EOMONTH(X_DELIVERY_DATE) as MonthEnd, 
     ... 

到轉換的日期mmm-yy,但我無法完成最後一步,我得到的是按字母順序排序的日期。如果有人可以請幫助!

+1

提示:從來轉換日期值到字符串,特別是不在SQL中出於這個原因。如果您需要按月分組,則將日期值轉換爲使用相同的日期值來表示每個月。 – Dai

+1

你能提供樣本數據和結果嗎?你的問題比你想象的更模糊。例如,你希望所有年份的Aprils能夠一起出現還是分開出現。 –

回答

0

您可以用DATEPART功能

DATEPART(month, '10/5/2015') 

發揮並嘗試這種計算:

SELECT (DATEPART(year, '3/5/2015') * 100) + 
     (CASE WHEN DATEPART(month, '3/5/2015') > 3 
     THEN DATEPART(month, '3/5/2015') - 4 
     ELSE DATEPART(month, '3/5/2015') + 9 
END); 
1

假設你使用SQL Server:

DECLARE @Temp TABLE 
(
    MonthEnd DATETIME 
) 

INSERT @Temp VALUES 
('2015/01/01'), 
('2015/02/01'), 
('2015/03/01'), 
('2015/04/01'), 
('2015/05/01'), 
('2015/06/01'), 
('2015/07/01'), 
('2015/08/01'), 
('2015/09/01'), 
('2015/10/01'), 
('2015/11/01'), 
('2015/12/01'), 
('2016/01/01'), 
('2016/02/01'), 
('2016/03/01'), 
('2016/04/01'), 
('2016/05/01'), 
('2016/06/01'), 
('2016/07/01'), 
('2016/08/01'), 
('2016/09/01'), 
('2016/10/01'), 
('2016/11/01'), 
('2016/12/01') 

SELECT MonthEnd, SUBSTRING(CONVERT(VARCHAR(11), MonthEnd, 113), 4, 8) 
FROM @Temp 
ORDER BY YEAR(MonthEnd), (MONTH(MonthEnd) + 8) % 12