我想实现一个SQL SERVER 的查询语句,要求精确到时分,例如,表名是:FKY_YUYUE
为什么下面的写法不正确的呢?
SELECT *
FROM FKY_YUYUE
WHERE CONVERT(char(16),GETDATE(),21)<='2023-08-08 12:58'
我想实现一个SQL SERVER 的查询语句,要求精确到时分,例如,表名是:FKY_YUYUE
为什么下面的写法不正确的呢?
SELECT *
FROM FKY_YUYUE
WHERE CONVERT(char(16),GETDATE(),21)<='2023-08-08 12:58'
该回答引用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' 之前的所有记录。
然而,如果你想要比较到时分,最好的方法是使用 datetime
或 datetime2
数据类型,而不是将日期时间转换为字符并进行比较。以下是更好的写法:
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 条件不成立。
如果您想要精确到时分的查询语句,有几种可能的方法:
SELECT *
FROM FKY_YUYUE
WHERE GETDATE() <= DATETIMEFROMPARTS(2023, 8, 8, 12, 58, 0, 0)
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
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.