【问题标题】:Select records between two columns with date and ignoring Year from date column从日期列中选择两列之间的记录并忽略年份
【发布时间】:2014-12-18 03:31:01
【问题描述】:

带有事件的 myTable 如下所示:

id     |    from_date    |    to_date    
 1     |   2014-10-01    |   2015-02-20
 2     |   2014-08-25    |   2015-04-01

from_date 和 to_date 是 date 列 年份并不重要,因为所有事件每年都是同一时间。例如每年 10-01 到 02-20 之间。

我想选择今天10-22的所有活动

我尝试使用 DayOfYear 但没有成功。

SELECT * FROM myTable WHERE DayOfYear('2014-10-22') 
BETWEEN DayOfYear(`from_date`) AND DayOfYear(`to_date`)

BETWEEN with date_format(from_date,'%m%d') 也不起作用

任何帮助都会很棒!

【问题讨论】:

    标签: mysql date datetime datediff


    【解决方案1】:

    to_datefrom_date之后的下一年时,您需要反转条件。

    SELECT *
    FROM myTable
    WHERE (YEAR(from_date) = YEAR(to_date) 
            AND DAYOFYEAR('2014-10-22') BETWEEN DAYOFYEAR(from_date) AND DAYOFYEAR(to_date))
        OR 
          (YEAR(from_date) != YEAR(to_date) 
            AND DAYOFYEAR('2014-10-22') NOT BETWEEN DAYOFYEAR(to_date) AND DAYOFYEAR(from_date))
    

    DEMO

    【讨论】:

    • 感谢您的帮助,但在您的查询中有错误,我找不到在哪里。请查看SQFiddle
    • 我多了一个括号。为什么找不到?你没有显示匹配括号的编辑器吗?
    • 我在 phpmyadmin 中输入了它,这就是为什么:/ 无论如何它不起作用。这个查询应该只返回第一条记录SQFiddle,但它会返回所有记录。
    • 您没有正确复制。在第二个BETWEEN 测试中,to_date 必须在from_date 之前。查看更新的小提琴。
    • 很奇怪,因为我使用了你的演示。无论如何,它工作得很好!非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多