SQL - 按日期范围查询

Posted

技术标签:

【中文标题】SQL - 按日期范围查询【英文标题】:SQL - Query by Date Range 【发布时间】:2009-06-17 13:14:34 【问题描述】:

我有一个名为“OrderH”的订单标题表。在此表中有一个名为“OrderDate”的列。我正在尝试检索日期在特定范围内的订单。我认为我可以使用“between”关键字来完成此操作,但我没有任何运气。这是我一直在烦恼的 SQL:

select 
    * 
from
    OrderH h
where
        h.OrderDate between '2009-06-16' and '2009-06-01'
order by
    h.OrderDate desc

我做错了什么?

【问题讨论】:

请添加更多关于哪个 DBMS 的信息、相关表的描述、错误消息(如果有)等。 如果 mysql:您的 OrderDate 是“日期”类型列还是“时间戳”列? 【参考方案1】:

较小的日期必须是第一个

between  '2009-06-01' and '2009-06-16'

而不是

between '2009-06-16' and '2009-06-01'

在使用 between 时也要小心,因为你会从较大的日期得到午夜值,而不是别的

看看How Does Between Work With Dates In SQL Server?

【讨论】:

哇。我需要更多的咖啡。我不敢相信我忽略了这么简单的事情。【参考方案2】:

查询不起作用,因为在您的示例中,第一个日期大于第二个日期。交换日期。第一个日期必须小于等于第二个日期。

【讨论】:

【参考方案3】:

很难找到在开始之前就结束的日期。更改最小值和最大值...

h.OrderDate between '2009-06-01' and '2009-06-16'

【讨论】:

【参考方案4】:
select 
    * 
from
    OrderH h
where
        h.OrderDate between '2009-06-01' and '2009-06-16'
order by
    h.OrderDate desc

【讨论】:

【参考方案5】:

在 2009 年 6 月 16 日午夜之后发生的 MS-SQL Server 事件将不包括在内。

【讨论】:

以上是关于SQL - 按日期范围查询的主要内容,如果未能解决你的问题,请参考以下文章

查询按日期范围分隔的行数

sql server 日期范围查询

SQL 查询 - 多个日期范围

按日期范围查询 Firestore

sql 查询时间、日期范围内的数据

SQL 按日期范围分区