簡體   English   中英

SQL選擇DateTime是否在某個時間間隔之間

[英]SQL Select if DateTime is between some Time interval

我有表T1:

ID  SCHEDULE
1   2018-05-12 14:00:00

我有桌子T2

 SCHEDULESTART       SCHEDULEEND
 09:00                  17:00

我需要從T1表中執行SELECT。

我想從T1獲取所有行,其中SCHEDULE字段的TIME在時間段之間(第二個表的START和END)。

我正在某些IBM應用程序中工作,該應用程序只能從第一個表T1的WHERE子句之后以SQL語句開始。

因此,查詢(不幸的是)必須始終以"SELECT * FROM T1 WHERE..."開頭"SELECT * FROM T1 WHERE..."這不能更改(請記住這一點)。

這意味着我不能在"FROM T1"部分之后使用某些JOIN或UNION ALL語句,因為僅在WHERE子句之后才能開始編寫SQL查詢。

對於此示例,可以使用如下語句:

select TIME(SCHEDULE) from T1
where  TIME(SCHEDULE)>=(SELECT SCHEDULESTART FROM T2 ) 
AND    TIME(SCHEDULE)<=(SELECT SCHEDULEEND FROM T2)

它將返回正確的結果。

但是,如果例如SCHEDULE是2018-05-12 23:00:00SCHEDULESTART is 22:00:00 2018-05-12 23:00:00SCHEDULESTART is 22:00:00 SCHEDULEEND is 03:00:00則此查詢將不起作用(這是合理的,因為時間是在晚上和從第一天切換到第二天)! T2表中可以計算的最大時間段是24小時時間段(僅一天)。

應該如何精確定義SQL查詢以涵蓋所有情況? 謝謝,

這是一個復雜的例子。 我將您的版本寫為:

where EXISTS (SELECT 1 FROM T2 WHERE TIME(T1.SCHEDULE) BETWEEN SCHEDULESTART AND SCHEDULEEND)

然后,您可以將其修改為:

where EXISTS (SELECT 1
              FROM T2
              WHERE (SCHEDULESTART <= SCHEDULEEND AND
                     TIME(T1.SCHEDULE) BETWEEN SCHEDULESTART SCHEDULEEND)
                    ) OR
                    (SCHEDULESTART > SCHEDULEEND AND
                     TIME(T1.SCHEDULE) NOT BETWEEN SCHEDULESTART AND SCHEDULEEND)
                    )
              );

嘗試這個:

where 
EXISTS (
        SELECT 
            1
        FROM 
            T2
        WHERE 
            ( 
                SCHEDULESTART <= SCHEDULEEND 
            AND
                TIME(T1.SCHEDULE) BETWEEN SCHEDULESTART AND SCHEDULEEND
            )
        OR
            (
                SCHEDULESTART > SCHEDULEEND AND
                (
                    TIME(T1.SCHEDULE) NOT BETWEEN SCHEDULEEND AND SCHEDULESTART
                ) 
                OR 
                    TIME(T1.SCHEDULE) = SCHEDULESTART 
                OR 
                    TIME(T1.SCHEDULE) = SCHEDULEEND
            )
        );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM