MySql按月添加日期

时间:2016-12-21 22:27:03

标签: mysql sql

我的查询工作正常,直到我添加日期范围:

WHERE c.content_date BETWEEN MONTH($date) AND MONTH($today)

基本上我希望从输入日期到今天每月都能获得所有内容。例如,如果$today2017-1-23$aDate2016-11-20,我希望所有内容从11月到1月(明年)

查询

 $result = DB::query("SELECT ".Content::$mDefaultContentListSelect."  
                    FROM crowdhub_content_to_buckets ctb 
                    LEFT JOIN crowdhub_content c 
                    WHERE c.content_date BETWEEN MONTH($date) AND MONTH($today)
                    ON ctb.crowdhub_content_to_buckets_content = c.content_id 
                    WHERE ctb.crowdhub_content_to_buckets_bucket IN ( SELECT bucket_id FROM crowdhub_buckets b WHERE b.bucket_name IN %ls ) 
                    AND ctb.crowdhub_content_to_buckets_content 
                    IN (SELECT content_to_tag_content AS content_id FROM crowdhub_content_to_tags 
                    WHERE content_to_tag_tag IN (SELECT tag_id FROM crowdhub_tags WHERE tag_name IN %ls)) ".$active." ORDER BY ".$sort_string." LIMIT ".($aCount * $aPageId).",".$aCount, $buckets, $tags);

2 个答案:

答案 0 :(得分:0)

这应该返回当月的第一天:

DATE_SUB($date, INTERVAL DAYOFMONTH($date)-1 DAY)

这是本月的最后一天:

LAST_DAY($today)


WHERE c.content_date BETWEEN DATE_SUB($date, INTERVAL DAYOFMONTH($date)-1 DAY) AND LAST_DAY($today)

答案 1 :(得分:0)

如果content_date列的数据类型为 DATE (我们只是猜测,我们无从得知)...

DATE表达式与整数值进行比较时,日期表达式将计算为整数。日期值“2016-12-21”将评估为2000万以北的整数值。准确地说是20,161,221。

该整数值​​不会小于或等于12.

作为示范:

 SELECT MONTH('2016-12-21')   

将返回12的整数值。

因此,删除MONTH函数。并考虑要与之比较的date值。并使用评估这些日期值的表达式。

“如果$今天是2017-01-23而$ aDate是2016-11-20我想要所有 内容从11月到1月(明年)“

然后与 date 值进行比较。看起来你想要的东西相当于:

WHERE c.content_date >= '2016-11-01'
  AND c.content_date <  '2017-02-01'

2016年11月,2016年12月和2017年1月的所有content_date值均为TRUE(仅限)。

我们可以使用评估这些日期值的表达式。使用问题中给出的日期值,如下所示:

WHERE c.content_date >= DATE_FORMAT( '2016-11-23' ,'%Y-%m-01') 
  AND c.content_date <  DATE_FORMAT( '2017-01-23' + INTERVAL 1 MONTH,'%Y-%m-01')

如果您要在SQL文本中进行变量替换,请注意 date 文字应包含在单引号中。如果没有单引号,破折号将被视为减法运算符

比较

  SELECT '2016-12-21' 

为:

  SELECT 2016-12-21      -- evaluates to integer value 1983
相关问题