MySQL中的分割日期字段在WHERE部分查询中使用YEAR和MONTH

时间:2015-05-28 21:42:14

标签: mysql

我的查询有一个名为CREATED_DATE的字段。这将从数据库中提取日期字段:

2015-05-11 12:23:58

但是我需要在查询本身中分割这个日期,因为我需要在查询的where部分使用年份和月份,例如:

SELECT CREATED_DATE FROM b_created_table WHERE YEAR = '2015' AND MONTH = '05'

我会用什么来分割它以获得我需要的两个部分。然后,我会在AS YEAR和AS MONTH中使用这些部分,以便我可以在查询的WHERE部分中使用它们。

提前致谢

2 个答案:

答案 0 :(得分:2)

您的具体问题的答案是:

SELECT CREATED_DATE
FROM b_created_table
WHERE YEAR(CREATED_DATE) = 2015 AND MONTH(CREATED_DATE) = 05;

但是,一般情况下,您希望避免可能被索引的列上的函数 - 并且CREATED_DATE可能会被编入索引。函数阻止使用索引。您有几个选项,但这里有一个如何避免这种情况的例子:

WHERE CREATED_DATE >= DATE(CONCAT_WS('-', '2015', '05', '01')) AND
      CREATED_DATE < DATE(CONCAT_WS('-', '2015', '05', '01')) + INTERVAL 1 MONTH

答案 1 :(得分:0)

如果你能避免它,最好不要在WHERE(和JOIN条件)中摆弄字段值:

SELECT CREATED_DATE 
FROM b_created_table 
WHERE CREATED_DATE >= '2015-[TARGETMONTH]-01 00:00:00'
   AND CREATED_DATE < '2015-[TARGETMONTH]-01 00:00:00' + INTERVAL 1 MONTH
;

但如果你坚持,MySQL有YEAR()MONTH()函数。

... 通过google搜索“mysql year”找到的第二个结果。