SQL:查找包含特定日期的数据

时间:2015-03-13 00:09:37

标签: mysql sql date select

我试图回复2014年8月发布的图书标题。我不确定是什么问题。

SELECT title_name
FROM titles
WHERE pubdate = '2014-08%';

我知道如何在两个不同的日期之间找到书籍的标题,所以不应该格式相同,除非大于或小于标志被替换为等于?

SELECT title_name
FROM titles
WHERE pubdate > '2014-07-15'
AND pubdate < '2014-08-15';

2 个答案:

答案 0 :(得分:1)

如果您要使用外卡,则需要使用LIKE而不是=

SELECT title_name
FROM titles
WHERE pubdate LIKE '2014-08%';

但更好的方法可能只是指定月份和年份(使用MONTH()YEAR()):

SELECT title_name
FROM titles
WHERE MONTH(pubdate) = 8 AND YEAR(pubdate) = 2014;

答案 1 :(得分:0)

实际上,你首先有正确的想法。您将“2014年8月”视为一个约会错过了它。它根本不是日期,而是间隔。间隔可以由两个日期分隔,即开始日期和结束日期。或者,如果是一个月的间隔,这不是一个恒定的持续时间 - 一些是30天,一些是31,一个甚至更少 - 然后使用下个月的开始作为结束日期。

因此,正确的查询看起来与您的示例非常相似:

SELECT  title_name
FROM    titles
WHERE   pubdate >= '2014-07-01'
    AND pubdate < '2014-08-01';

它还具有被sargable带来的额外好处。也就是说,如果将pubdate编入索引,则将使用索引。搜索将从8月份印刷的第一本书开始,到8月份后印刷的第一本书时停止。如果将pubdate传递给函数,则无法使用索引,并且必须扫描整个表中的每个pubdate。