如何使用WHERE子句过滤日期和时间范围?

时间:2017-09-25 04:42:19

标签: mysql sql sql-server

我正在尝试查找在特定日期和时间发生的客户约定,

我认为我的日期部分是正确的,但我似乎无法正确设定时间。

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

1 个答案:

答案 0 :(得分:0)

你有一个原因是因为你选择用2个数据库标记你的问题,但每个数据库的语法都非常不同。

另一个是没有一些关键事实"我们只是猜测。例如what is the datatype of StartTime ??这对解决方案至关重要,因为如果数据类型为DATE,那么这将失败WHERE StartDate LIKE '2012-10-%%'但如果数据类型为VARCHAR或类似,那么它将起作用(类型)。我们还需要知道StartTime的数据类型。

所以:如果

  1. 您正在使用MySQL
  2. StartDate的数据类型为Date
  3. StartTime的数据类型为Time
  4. 以下是您的查询可能如何运作的示例,请参阅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'
    

    <强> Results

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

    请注意,同样的查询在SQL Server中也可以使用,数据类型与此处假设的相同。

    最后一点。如果数据类型是日期&amp;那时候他们不是STRINGS(文本),即使他们看起来像他们。所以喜欢2012-10%&#39;不会起作用,但是将日期/时间信息存储为叮咬并不是一个好主意。