以下工作:
SELECT * FROM myTable WHERE date_created BETWEEN '2014-10-05' AND '2015-12-31';
然而,我尝试了以下几点:
SELECT * FROM myTable WHERE date_created BETWEEN '2014-10%' AND '2015-12%';
这是行不通的,有没有办法选择两个日期与通配符在其中?
SELECT * FROM myTable WHERE year(date_created) BETWEEN 2014 AND 2015 AND month(date_created) BETWEEN 10 AND 12
我也尝试过像上面这样做,这也不选择一个范围,它只选择所有的东西是2014和2015,所有只有月份10和12的东西。
有什么办法可以让我做以下工作吗?
SELECT * FROM myTable WHERE date_created BETWEEN '2014-10%' AND '2015-12%';
发布于 2015-12-09 20:28:55
使用LAST_DAY函数获取日期的最后一天。
WHERE date_created BETWEEN DATE_FORMAT('2014-10-05', '%Y-%m-01') AND LAST_DAY('2015-12-02')这比在DATE_FORMAT列上使用date_created的解决方案要好,因为它可以在该列上使用索引。
发布于 2015-12-09 20:12:02
您可以为此使用DATE_FORMAT
SELECT * FROM myTable WHERE DATE_FORMAT(date_created,"%Y-%m") BETWEEN
DATE_FORMAT('2014-10-05',"%Y-%m") AND DATE_FORMAT('2015-12-31',"%Y-%m") ;发布于 2015-12-09 20:40:23
虽然@GoudaElalfy解决方案可以完成这项工作,但该查询可能会出现性能问题。它不会在列date_created上使用简单的索引。
引用您的评论,说明您实际上需要的是构建一个覆盖了整整几个月的查询:
我希望我能在SQL中得到一个月的范围,所以我不必在java中找到这个月的最后一天。因为这样做:在“2014-10-01”和“2015-12-31”之间,我需要知道上个月的nr。
您可以计算这些值,并将列保留在WHERE子句中,这样它就可以从简单的索引中获益。
其中一种方法是使用LAST_DAY()函数
SELECT *
FROM myTable
WHERE date_created BETWEEN DATE_FORMAT('2014-10-05', '%Y-%m-01') AND LAST_DAY('2015-12-31');第二种方法是使用一些简单的计算。
SELECT *
FROM myTable
WHERE date_created BETWEEN DATE_FORMAT('2014-10-05', '%Y-%m-01') AND DATE_FORMAT('2015-12-31' + INTERVAL 1 MONTH, '%Y-%m-01') - INTERVAL 1 DAY;https://stackoverflow.com/questions/34187989
复制相似问题