【问题标题】:SQL Server : query to get MINUTE of date in specific dateSQL Server:查询以获取特定日期的 MINUTE 日期
【发布时间】:2017-07-31 16:33:09
【问题描述】:

以下查询返回日期中某个小时的 MINUTE。

例如如果日期值='2017-07-19 05:50:00.000',它将返回50

我的问题是我需要在指定日期获取 MINUTE,而不是表中存在的所有日期。

查询:

SELECT 
    DATEPART(MINUTE, ClockOut) 
FROM
    [dbo].[Attendance] 
WHERE
    DATEPART(HOUR, ClockOut) = '5'

我尝试只在'2017-07-19' 中返回分钟的查询,它没有返回任何记录。

SELECT 
    DATEPART(MINUTE, ClockOut) 
FROM
    [dbo].[Attendance] 
WHERE 
    DATEPART(HOUR, ClockOut) = '5' AND ClockOut = '2017-07-19'

样本数据

打卡

2017-07-19 05:50:00.000
2017-07-20 05:51:00.000
2017-07-21 05:52:00.000

我只需要在这个日期的 5 点返回分钟 '2017-07-19'

【问题讨论】:

  • 能否提供样本数据?
  • 我刚刚添加了数据

标签: sql sql-server


【解决方案1】:

您正在比较日期时间,这就是它没有返回您想要的结果的原因。

SELECT  DATEPART(MINUTE, ClockOut)
FROM    [dbo].[Attendance]
WHERE   DATEPART(HOUR, ClockOut) = '5'
        AND CAST(ClockOut AS DATE) = '2017-07-19';

【讨论】:

    【解决方案2】:

    如果您使用 ClockOut='2017-07-19' 就像写 '2017-07-19 0:00:00'。尝试使用 DataPart (yyyy, Clockout)=2017 和 DataPary (MM, Clockout)=7 和 DataPart (dd, Clockout)=19

    【讨论】:

      【解决方案3】:

      您的 ClockOut 列包含 DateTime (2017-07-19 12:03:42),因此它的值永远不会完全等于日期 (2017-07-19)。请改用范围,以便查询计划可以在 Clockout 上使用潜在索引。如果行数很大,强制转换为日期或使用 DatePart 会导致执行时间延长。

      SELECT DATEPART(MINUTE, ClockOut) 
      FROM   [dbo].[Attendance] 
      WHERE  DATEPART(HOUR, ClockOut) = 5 
      AND    ClockOut BETWEEN '2017-07-19' 
                          AND '2017-07-20' -- start of next day
      

      working demo

      【讨论】:

        猜你喜欢
        • 2014-08-29
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多