要求说每个月从20日开始。例如,7月1日是6月20日。现在我的查询是
select * from tbl where MONTH(mois)=7
但我知道它不正确,有没有办法做到这一点?
我的问题是如何选择某个月的行知道每个月从20开始?是否有一个通用的SQL解决方案,不是特定的某个数据库?
答案 0 :(得分:3)
在MySQL中,您可以使用CASE结构:
SELECT
CASE
WHEN DAYOFMONTH(mois) >= 20 THEN (MONTH(mois) + 1) % 12
ELSE MONTH(mois)
END current_month;
modulo operator%注意它也适用于12月20日到31日之间的日子。它会在1月份返回。
您可以在查询中使用它:
SELECT * FROM tbl WHERE
CASE
WHEN DAYOFMONTH(mois) >= 20 THEN (MONTH(mois) + 1) % 12
ELSE MONTH(mois)
END = 7;
注意强>
当前的MySQL无法使用索引来处理这种情况。
答案 1 :(得分:0)
我读过这样的问题,如果一天> = 20,那么你需要获得下个月的数字,否则就是同月的数字。
<强> SQL 强>
DECLARE @DT DATE = '2014-12-19'
SELECT CASE WHEN (DATEPART(DAY,@DT))/20 = 1
THEN (DATEPART(MONTH,@DT) + 1)%12
ELSE DATEPART(MONTH,@DT)
END
--SQL is in TSQL
<强>结果:强>
12