在任何日期选择具有时间范围的数据

时间:2018-01-04 20:38:12

标签: sql sql-server

我正在尝试在特定时间范围内查询订单。我知道你如何在某个日期做到这一点,但我想从下午3:00到晚上7点,或者上午12点到晚上10点半选择所有订单,依此类推。这可能吗?另外,如果你不介意,我想要一些解释,因为我是SQL的新手。 谢谢!

3 个答案:

答案 0 :(得分:0)

您可以在where子句中指定所需内容,如下例所示:

Where OrderFrom between '3:00PM' and '7:00PM'

或者你可以这样做:

Where OrderFrom >= '3:00PM' and OrderFrom <= '7:00PM'

答案 1 :(得分:0)

是的,这是可能的。

select * from date_table where date ='date1' and time between 'time1' and 'time2'

给出date1,time1和time2的值

您可以使用以上查询来获取特定时间之间任何一天的输出。

答案 2 :(得分:0)

假设您有一个DATETIME类型的OrderDate列,您可以使用:

SELECT *
FROM <YourTableName>
WHERE CAST(OrderDate AS DATE) = <YourDateValue>
    AND (
            CAST(OrderDate AS TIME) BETWEEN '3:00PM' AND '7:00PM'
            OR CAST(OrderDate AS TIME) BETWEEN '12:00AM' AND '10:00AM'
        )

如果您省略DATE比较,则无论日期如何,都会返回在您的小时之间具有DATETIME分量的所有TIME值。

看一下这个例子:

CREATE TABLE #test (val DATETIME)
INSERT INTO #test (val)
VALUES ('2018-01-04 09:00:00.000')
,('2018-01-04 10:00:00.000')
,('2018-01-04 11:00:00.000')
,('2018-01-04 12:00:00.000')
,('2018-01-05 09:00:00.000')
,('2018-01-05 10:00:00.000')
,('2018-01-05 11:00:00.000')
,('2018-01-05 12:00:00.000')

SELECT * FROM #test
WHERE CAST(val AS TIME) BETWEEN '9:00AM' AND '11:00AM'

此查询的结果是:

val
2018-01-04 09:00:00.000
2018-01-04 10:00:00.000
2018-01-04 11:00:00.000
2018-01-05 09:00:00.000
2018-01-05 10:00:00.000
2018-01-05 11:00:00.000