【问题标题】:SQL query to select rows where the year is between two datesSQL查询选择年份在两个日期之间的行
【发布时间】: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';

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

【问题讨论】:

    标签: mysql sql date


    【解决方案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 已经想通了,但无论如何感谢我现在得到了我的工作解决方案;)
    猜你喜欢
    • 2012-03-12
    • 2015-04-01
    • 2011-07-04
    • 1970-01-01
    • 2013-02-11
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多