SQL Select 查询以选择日期之间的数据,其中从日期月份高于日期月份和年份差异>1
Posted
技术标签:
【中文标题】SQL Select 查询以选择日期之间的数据,其中从日期月份高于日期月份和年份差异>1【英文标题】:SQL Select query to select data between to dates where from date month is higher than the to date month and year difference is >1 【发布时间】:2014-09-05 06:35:11 【问题描述】:我想从查询参数类似于的表中选择所有记录:
from_month: 09
to_month : 03
从年份:2011
to_year: 2014
我正在尝试以下查询:
Select * from Table
where month(created_at) between '09' and '03'
and year(created_at) between '2011' and '2014'
虽然数据在那里,但它返回零记录,因为 from_month 大于 to 月份。
我什至尝试了直接比较日期而不是分别计算月份和年份的查询,但它仍然返回零记录。
【问题讨论】:
请把你的表结构摆好 from_month 还是 from_date?还是 to_date 还是 to_month? Select * from Table where (month(created_at) >=9 OR month(created_at) 【参考方案1】:你可以试试吗?我认为你是这样做的。它的最大值到最小值之间
where month(created_at) between '09' and '03'
改为
where month(created_at) between '03' and '09'
或使用大于和小于的方式
SELECT * FROM tbl WHERE month(created_at)>='09' AND month(created_at)<='11'
【讨论】:
【参考方案2】:您的查询失败有两个原因。首先,between
需要先有下限,然后是上限。因此,beween 9 and 3
将始终为您提供0
记录。
其次,它将丢失例如'2012-01-01'
和'2012-02-28'
之间的记录以及'2012-10-01'
和'2013-02-28'
之间的记录。
不要让它变得更复杂。
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND '2014-03-31'
这样做也更好,因为 mysql 不能在应用函数的列上使用索引。
如果你不知道,如果日期的上限是 30、31、28 甚至 29,你可以这样做:
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND LAST_DAY('2014-03-01');
还请注意,当您的created_at
列是时间戳或日期时间类型时,您必须附加一个时间。否则你会错过最后一天的记录。
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND '2014-03-31 23:59:59'
当你不附加时间时,它会自动变为00:00:00
,因此你会错过2014-03-31
。
【讨论】:
以上是关于SQL Select 查询以选择日期之间的数据,其中从日期月份高于日期月份和年份差异>1的主要内容,如果未能解决你的问题,请参考以下文章