【问题标题】:Is there any way to get current time and minutes from SQL to compare with date time?有没有办法从 SQL 获取当前时间和分钟以与日期时间进行比较?
【发布时间】:2020-01-31 04:40:02
【问题描述】:

我正在尝试将datetime 列与当前时间进行比较,直到分钟。但是,我最多只能将其比较到以下几天:

SELECT *
FROM ScheduleTable
WHERE YEAR(CURRENT_TIMESTAMP)  = YEAR(schedule)
AND   MONTH(CURRENT_TIMESTAMP) = MONTH(schedule)
AND   DAY(CURRENT_TIMESTAMP)   = DAY(schedule)

那么,是否也可以比较小时和分钟?

【问题讨论】:

  • 数据库和版本是什么

标签: sql sql-server tsql datetime


【解决方案1】:

对于小时和分钟,没有可以使用的“快捷方式”功能 - 您需要使用DATEPART

SELECT * 
FROM ScheduleTable 
WHERE YEAR(CURRENT_TIMESTAMP) = YEAR(schedule) 
  AND MONTH(CURRENT_TIMESTAMP) = MONTH(schedule) 
  AND DAY(CURRENT_TIMESTAMP) = DAY(schedule)
  AND DATEPART(HOUR, CURRENT_TIMESTAMP) = DATEPART(HOUR, schedule)
  AND DATEPART(MINUTE, CURRENT_TIMESTAMP) = DATEPART(MINUTE, schedule)

查看official MS docs entry for DATEPART了解更多详情

【讨论】:

    【解决方案2】:

    假设schedule 列是一个日期时间,其秒和毫秒部分始终为零,您可以简单地将当前时间戳的秒和毫秒归零以进行比较:

    WHERE schedule = DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP), 0)
    

    如果schedule 列的秒和毫秒部分可能不为零,则改用此逻辑:

    WHERE schedule >= DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP), 0)
    AND   schedule <  DATEADD(minute, DATEDIFF(minute, 0, CURRENT_TIMESTAMP) + 1, 0)
    

    表达式产生this result

    【讨论】:

    • +1 作为第一个选项是索引友好的。要获得第二个版本的索引友好版本,可以更改第一个版本,以将当前时间精确到分钟,另外还提供当前时间的下一分钟,并进行范围比较。
    【解决方案3】:

    试试这个:

    SELECT * FROM ScheduleTable WHERE DATEPART(YEAR,schedule) = DATEPART(YEAR,GETDATE()) AND 
        DATEPART(MONTH,schedule) = DATEPART(MONTH,GETDATE()) AND 
        DATEPART(DAY,schedule) = DATEPART(DAY,GETDATE())
    

    【讨论】:

    • 这不是在原始帖子中添加任何新的检查/功能......你只是使用DATEPART而不是“快捷方式”方法......
    【解决方案4】:

    您可以使用函数NOW()。它根据函数的上下文(数字或字符串)以YYYY-MM-DD HH:MM:SS 格式或YYYYMMDDHHMMSS.uuuuuu 格式返回当前日期和时间的值。

    要获取日期的特定部分,您可以使用DATEPART (Transact-SQL)

    语法:DATEPART(interval, date)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多