Mysql选择月份从20月开始

时间:2014-08-13 08:58:26

标签: mysql sql sqlite

要求说每个月从20日开始。例如,7月1日是6月20日。现在我的查询是

select * from tbl where MONTH(mois)=7

但我知道它不正确,有没有办法做到这一点?

我的问题是如何选择某个月的行知道每个月从20开始?是否有一个通用的SQL解决方案,不是特定的某个数据库?

2 个答案:

答案 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