我有一个资源表,其中一个字段是日期字段,其数据类型为日期 . 我想要输出以下内容:
当月记录(比如五月 - 一年并不重要)
然后是以下(再次假设五月是当月)
-
六月记录
-
七月记录
-
八月记录
-
九月记录
-
十月记录
-
十一月记录
-
十二月记录
-
1月份记录
-
二月份记录
-
三月记录
-
四月记录
六月,六月是当月,订单将是:
-
七月记录
-
八月记录
-
......
这是我的SQL ...我不知道如何命令输出达到所需的顺序(5,6,7,8,9,10,11,12,1,2,3,4):
SELECT
resource_id,
resource_title,
resource_summary,
resource_category,
resource_status,
resource_date,
DATEPART(month, resource_date) AS resource_month,
DATEPART(day, resource_date) AS resource_day
FROM dbo.resources
WHERE (resource_category = N'Quotes')
AND (resource_status <> N'Draft')
我找到了这个可能的MySQL解决方案:
我需要不寻常的订购mysql结果
但是我遗漏了一些东西 .
6 回答
它会对你有用吗?
ORDER BY CASE DATEPART(month, resource_date) WHEN 5 THEN 0 WHEN 6 THEN 1 ... etc END
我认为这样的事情可能就是你想要的:
如何'回合
ORDER BY (DATEPART(month,resource_date) - (DATEPART(month,getdate() -1)) % 12)
因此,在5月(第5个月),您按行-6(模12)中的月份进行排序 . 因此,6月(第6个月)将为0,7月(7)将为1 .
6月,7月将是0等
第一个术语按
resource_date
月份设置主要订单(当前月份将是第一个,前一个月份,最后一个月份) . 第二个术语在一个月内命令时间戳,而不管日期的年份 . 如果您的日期不包含时间部分或时间部分绝对不相关,您可以将其替换为DAY(resource_date)
. 最后,最后一个术语将年份考虑在其他相同的日期(也可能只是resource_date
) .您应该能够使用DATEPART代替
DATE_FORMAT
来调整MySQL解决方案:我没有SQL Server方便,所以我不确定它是否会对ORDER BY子句中的布尔值感到满意 . 如果它不喜欢布尔ORDER BY,那么CASE应该可以做到这一点:
我假设“resource_date”中有一年 - 不是吗?在这种情况下,您可以简单地过滤和排序
如果没有年份(或更确切地说:不同的未知年份),您可以这样做:
希望它有所帮助......