簡體   English   中英

如何使用 WHERE 子句過濾日期和時間范圍?

[英]How can I use the WHERE clause to filter a date and range of time?

我正在嘗試查找在特定日期和時間發生的客戶互動,

我想我的日期部分是正確的,但是我似乎無法正確設置時間。

SELECT EngagementNumber,
       StartDate,
       StartTime
FROM Engagements
WHERE StartDate LIKE '2012-10-%%'
      AND StartTime BETWEEN '12:00:00.0000000' AND '17:00:00.0000000';

您投反對票的一個原因是您選擇用 2 個數據庫標記您的問題,但每個數據庫的語法非常不同。

另一個原因是,如果沒有一些“關鍵事實”,我們只能猜測。 例如what is the datatype of StartTime ?? 這對解決方案至關重要,因為如果數據類型是DATE那么這將失敗WHERE StartDate LIKE '2012-10-%%'但如果數據類型是VARCHAR或類似,那么它會起作用(有點)。 我們還需要知道 StartTime 的數據類型。

因此,如果

  1. 你正在使用 MySQL
  2. StartDate 的數據類型為 Date
  3. StartTime 的數據類型是 Time

下面是您的查詢可能如何工作的示例,請參閱SQL Fiddle 上的演示

示例數據(MySQL)

CREATE TABLE Engagements
    (`EngagementNumber` int, `StartDate` datetime, `StartTime` time)
;

INSERT INTO Engagements
    (`EngagementNumber`, `StartDate`, `StartTime`)
VALUES
    (1, '2017-09-01 00:00:00', '13:14:15'),
    (2, '2017-10-01 00:00:00', '14:15:16'),
    (3, '2017-10-11 00:00:00', '15:16:17')
;

查詢 1

SELECT EngagementNumber,
       StartDate,
       StartTime
FROM Engagements
WHERE StartDate >= '2017-10-01' and StartDate < '2017-11-01'
AND StartTime BETWEEN '12:00' AND '17:00'

結果

| EngagementNumber |            StartDate | StartTime |
|------------------|----------------------|-----------|
|                2 | 2017-10-01T00:00:00Z |  14:15:16 |
|                3 | 2017-10-11T00:00:00Z |  15:16:17 |

請注意,相同的查詢也適用於 SQL Server,因為數據類型與此處假設的相同。

最后一點。 如果數據類型是日期和時間,那么即使它們看起來像,它們也不是字符串(文本)。 所以 LIKE '2012-10%' 將不起作用,但無論如何將日期/時間信息存儲為刺痛都不是一個好主意。

暫無
暫無

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

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