我想根据月份订购我的餐桌。 ..但事情是在财政年度期间按月计算......即,4月到3月。 提前谢谢
答案 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