Mysql 如何使用WHERE子句筛选日期和时间范围?

Mysql 如何使用WHERE子句筛选日期和时间范围?,mysql,sql,sql-server,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'; 您有否决票的一个原因是,您选择用两个数

我试图找到在特定日期和时间发生的客户约定

我想我的日期部分是正确的,但是我似乎无法正确设置时间

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

您有否决票的一个原因是,您选择用两个数据库标记您的问题,但每个数据库的语法都非常不同


另一个原因是,没有一些“关键事实”,我们只是在猜测。e、 g.
StartTime的数据类型是什么???
这对解决方案至关重要,因为如果数据类型是
DATE
,那么在StartDate如“2012-10-%%”的情况下,这将失败
但是如果数据类型是
VARCHAR
或类似的,那么它将工作(某种程度上)。我们还需要知道StartTime的数据类型

So:IF

  • 您正在使用MySQL
  • StartDate的数据类型是Date
  • StartTime的数据类型是Time
  • 下面是查询如何工作的示例,请参见

    示例数据(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')
    ;
    
    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 |
    
    查询1

    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')
    ;
    
    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中使用


    最后一个音符。如果数据类型是日期和时间,则它们不是字符串(文本),即使它们看起来像字符串。因此,像“2012-10%”这样的选项不起作用,但将日期/时间信息存储为stings无论如何都不是一个好主意。

    sql server和mysql引用不同,请选择其中任何一个。StartTime的数据类型是什么?提供表定义和示例数据集。我还想问为什么StartDate和StartTime位于不同的列中。在您的设计中,是否可以将它们合并到一个列中?您的问题现在解决了吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅