从4月开始的SQL排序月末(mmm-yy)

时间:2015-10-06 01:07:43

标签: sql date

在SQL中我试图将日期转换为mmm-yy,然后从4月开始排序为第一个月。到目前为止,我已设法使用

将日期转换为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,
        ...

但是我无法完成最后一步,我得到的是按字母顺序排序的日期。如果有人可以请求帮助!!

2 个答案:

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

答案 1 :(得分: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);