我试图回复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';
答案 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。