billrolbin 2023-08-08 19:08 采纳率: 80.8%
浏览 2
已结题

SQL SERVER时间查询语句要求精确到时分

我想实现一个SQL SERVER 的查询语句,要求精确到时分,例如,表名是:FKY_YUYUE

为什么下面的写法不正确的呢?

SELECT *
FROM FKY_YUYUE
WHERE  CONVERT(char(16),GETDATE(),21)<='2023-08-08 12:58'

  • 写回答

3条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-08-08 19:14
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确
    你的查询语句有一个小错误,需要进行一些修正。在 SQL Server 中,要比较日期时间时,确保你使用的日期格式是正确的,并且最好使用合适的数据类型进行比较。在你的情况下,你可以使用以下方法来实现你的需求:

    SELECT *
    FROM FKY_YUYUE
    WHERE CONVERT(char(16), GETDATE(), 21) <= '2023-08-08 12:58'
    

    这将返回表 FKY_YUYUE 中在 '2023-08-08 12:58' 之前的所有记录。


    然而,如果你想要比较到时分,最好的方法是使用 datetimedatetime2 数据类型,而不是将日期时间转换为字符并进行比较。以下是更好的写法:

    SELECT *
    FROM FKY_YUYUE
    WHERE GETDATE() <= '2023-08-08 12:58:00'
    

    这个查询会返回表中在 '2023-08-08 12:58:00' 之前的所有记录。


    需要注意的是,如果你想要包括 '2023-08-08 12:58:00' 这一时刻的记录,可以使用 < 操作符,而不是 <= 操作符:

    SELECT *
    FROM FKY_YUYUE
    WHERE GETDATE() < '2023-08-08 12:59:00'
    

    这将返回表中在 '2023-08-08 12:58:00' 之前,但不包括 '2023-08-08 12:59:00' 的所有记录。


    该回答引用NewBing,仅供参考,不保证完全正确

    您的写法不正确的原因可能是您使用了 CONVERT 函数来将 GETDATE() 的返回值转换为 char(16) 类型,而这个类型的格式是 yyyy-mm-dd hh:mm ,没有秒部分。因此,当您用这个值和字符串 '2023-08-08 12:58' 比较时,实际上是比较了 '2023-08-08 12:58:00' 和 '2023-08-08 12:58' ,这两个值是不相等的,所以 WHERE 条件不成立。


    如果您想要精确到时分的查询语句,有几种可能的方法:

    • 使用 DATETIMEFROMPARTS 函数来构造一个 datetime 类型的值,然后和 GETDATE() 比较。例如:
    SELECT *
    FROM FKY_YUYUE
    WHERE GETDATE() <= DATETIMEFROMPARTS(2023, 8, 8, 12, 58, 0, 0)
    
    • 使用 DATEPART 函数来提取 GETDATE() 的年、月、日、时、分部分,然后和指定的值比较。例如:
    SELECT *
    FROM FKY_YUYUE
    WHERE DATEPART(YEAR, GETDATE()) <= 2023
    AND DATEPART(MONTH, GETDATE()) <= 8
    AND DATEPART(DAY, GETDATE()) <= 8
    AND DATEPART(HOUR, GETDATE()) <= 12
    AND DATEPART(MINUTE, GETDATE()) <= 58
    
    • 使用 CAST 或 CONVERT 函数将 GETDATE() 的返回值转换为 datetime2(0) 类型,这个类型的格式是 yyyy-mm-dd hh:mm:ss ,有秒部分,但是精度为 0 。然后和一个同样格式的字符串比较。例如:
    SELECT *
    FROM FKY_YUYUE
    WHERE CAST(GETDATE() AS datetime2(0)) <= '2023-08-08 12:58:00'
    

    以上方法都可以实现您想要的效果,您可以根据您的喜好和需求选择其中一种。如果您想了解更多关于 SQL SERVER 的日期和时间数据类型和函数的信息,您可以参考以下链接⁴ 。


    源: 与必应的对话, 2023/8/8
    (1) datetime (Transact-SQL) - SQL Server | Microsoft Learn. https://learn.microsoft.com/zh-cn/sql/t-sql/data-types/datetime-transact-sql?view=sql-server-ver16.
    (2) 日期和时间数据类型及函数 - SQL Server (Transact-SQL) | Microsoft Learn. https://learn.microsoft.com/zh-cn/sql/t-sql/functions/date-and-time-data-types-and-functions-transact-sql?view=sql-server-ver16.
    (3) SQL中日期类型比较(精确到时分秒) - CSDN博客. https://blog.csdn.net/badarker/article/details/109307320.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 8月8日

悬赏问题

  • ¥15 SQL insert into错误
  • ¥50 zk+kafka三节点,zk异常重新选主后导致的高可用问题
  • ¥15 对回溯算法进行剪枝操作
  • ¥15 安全模式下,用户没有C盘所有权限
  • ¥15 grbl怎么清除一条命令?
  • ¥60 用继电器控制道闸开闸
  • ¥15 grbl移动过程中,发送“!"停止,进入Hold状态,怎么解除?
  • ¥15 wpf中自己实现sorting,每一次都是升序排列
  • ¥15 odoo17中,产品分包路线如何设置?可从销售订单中直接触发采购订单及相关单据
  • ¥15 请教下win10wx和麒麟wx无法互通俩者数据并不兼吗,如何解决?(标签-linux)