在SQL Server 2008中按月排序

时间:2010-11-29 13:54:54

标签: sql sql-server

我想根据月份订购我的餐桌。 ..但事情是在财政年度期间按月计算......即,4月到3月。 提前谢谢

6 个答案:

答案 0 :(得分:3)

您可以通过任何可以为...编写表达式的命令。在您的情况下 尝试:

  ... Order By (Month(somedate) + 8) % 12

编辑:应该是8而不是9 ......

答案 1 :(得分:3)

我建议类似雅各布的答案,只是更多的是:

((month(somedate) - 4) + 12) % 12

从4月开始减去4班。在4月之前的月份添加12个句柄,并且模数校正4月后的月份的前一步骤。

这将产生0到11范围内的结果。此外,x - 4 + 12步骤可以简化为x + 8;为了解释的目的,我以为我不会将其留下来。

答案 2 :(得分:3)

上面的很多内容都可行,但如果您发现自己使用不同的日历进行大量日期操作,则可能需要创建一个单独的日历表作为查找。

这样的东西

CREATE TABLE [dim].[Date](
    [DateSK] [int] NOT NULL,
    [Date] [datetime] NOT NULL,
    [Year] [int] NOT NULL,
    [Month] [int] NOT NULL,
    [Day] [int] NOT NULL,
    [WeekDayName] [varchar](9) NOT NULL,
    [MonthName] [varchar](9) NOT NULL,
    [QuarterNumber] [int] NOT NULL,
    [FinancialYear] [int] NOT NULL,
    [FinancialMonth] [int] NOT NULL,
    [MonthLength] [int] NOT NULL,
    [DaysRemainingInMonth] [int] NOT NULL,
    [DaysRemainingInYear] [int] NOT NULL,
    [IsLeapYear] [bit] NOT NULL,
    [DaysInYear] [int] NOT NULL,
    [DayOfYear] [int] NOT NULL,

    etc, etc.
)


答案 3 :(得分:2)

USE my_db

SELECT 
    MONTH(t1.expiry) as SortOrder, 
    DATENAME(MONTH,t1.expiry) AS ExpiryMonth,  
    COUNT(*) AS Count

FROM 
    table1 t1 LEFT JOIN table2 t2 ON t2.c1 = t1.c1

WHERE 
    YEAR(t1.expiry) = '2012' AND t2.c2 = 'X'

GROUP BY
    MONTH(t1.expiry),
    DATENAME(MONTH,t1.expity)

ORDER BY 
    SortOrder ASC

我想像这样一个更通用的解决方案比总是使用自定义排序更好。在处理时间方面没有太多成本。

答案 4 :(得分:1)

SELECT
Column1,
Column2,
Column3,
SomeDate,
CASE MONTH(SomeDate)
  WHEN  4 THEN  1
  WHEN  5 THEN  2
  WHEN  6 THEN  3
  WHEN  7 THEN  4
  WHEN  8 THEN  5
  WHEN  9 THEN  6
  WHEN 10 THEN  7
  WHEN 11 THEN  8
  WHEN 12 THEN  9
  WHEN  1 THEN 10
  WHEN  2 THEN 11
  WHEN  3 THEN 12
END as FiscalMonth
FROM myTable
ORDER BY FiscalMonth

答案 5 :(得分:0)

这个怎么样:

SELECT ...
ORDER BY MONTH(SomeDate) % 4