SQL查询选择年份在两个日期之间的行

Posted

技术标签:

【中文标题】SQL查询选择年份在两个日期之间的行【英文标题】:SQL query to select rows where the year is between two dates 【发布时间】:2015-03-08 14:12:55 【问题描述】:

给定一个包含 from_date 日期和 to_date 日期列的表,我想选择所有数据集,其中一年(例如 2007 年)是其中一个日期或两者的年份,或者介于两个日期之间。

如何使用 mysql 实现这一点?

表:

create Table Articleprice
(`ArtikelpreisNR` int, `ArtikelNR` int, `from_Date` date, `to_date` date, `price` int);

示例测试数据

insert into Articleprice
(`ArtikelPreisNR`, `ArtikelNR`,`from_Date`, `to_Date` ,`price`)

values (1, 1, '2006-7-04', '2008-7-04', 10);

SQL: 当 from_date 和 to_date = 2007 时,这只会返回那些

SELECT
MIN(price)
FROM  Articleprice
WHERE Articleprice.from_Date >= '2007/01/01' and Articleprice.to_Date <= '2007/12/31';

我需要做什么才能解决我的案件?

【问题讨论】:

【参考方案1】:

首先,您使用年份构建完整的日期。对于 2007 年,日期将是 2007-01-012007-12-31(假设结束日期包括在内)。

接下来,您使用overlapping dates query 查找 (i) 在内部结束 (ii) 在内部开始 (iii) 包含或 (iv) 包含在 2007 年之内的所有行。查询很简单:

SELECT * FROM Articleprice
WHERE '2007-12-31' >= from_Date AND to_date > '2007-01-01'

【讨论】:

必须深入了解重叠日期查询,因此我的考试需要它。谢谢你给我一些工作;) Bug:第一个不等式必须是 ">="【参考方案2】:

假设您的日期实际上是日期而不是字符串,您需要在查询中使用正确的日期格式:YYYY-MM-DD 而不是 YYY/MM/DD:

WHERE Articleprice.from_Date >= '2007-01-01' and Articleprice.to_Date <= '2007-12-31';

【讨论】:

这不会返回行,例如,从日期为2006-7-04,到日期为2008-7-04(参见示例数据,OP 认为应该返回)。 更新您的问题以显示实际的表数据和结构。您没有告诉我们一些重要的事情,因为这在正常情况下工作。 @johnconde 这一切都在我的问题中,Salman A 已经想通了,但无论如何感谢我现在得到了我的工作解决方案;)

以上是关于SQL查询选择年份在两个日期之间的行的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式在两个日期之间进行 SQL 查询

SQL查询以选择两个日期之间的日期

SQL 之间不包括所有查询范围(日期)

SQL Server 2008 仅在月份和年份之间选择数据

SQL查询以查找列的行值之间的最小差异

sql中查出两个日期之间的数据