【问题标题】:Timeserial not recognized built in function in MS SQLMS SQL 中的内置函数无法识别 Timeserial
【发布时间】:2022-01-03 14:03:48
【问题描述】:

我正在尝试实现一个 SQL 查询,该查询根据我表中的日期时间列获取今天固定时间 18:00 和昨天固定时间 18:00 之间的记录。

我试过这个查询

DECLARE @today date = GETDATE()
SELECT * 
FROM mytab
WHERE datetimecolumn Between @today-1 + TimeSerial(18,0,0) 
                              And @today   + TimeSerial(18,0,0)

但是,它抛出了一个错误Timeserial is not a recognized built-in function name.

有什么想法吗?

【问题讨论】:

  • 那是因为它不是 SQL Server 中的函数。好像是个MSAccess函数?
  • fine manual 记录了日期和时间类型的可用函数。
  • 如果总是整小时(-6 或 +18),可能只是最容易使用dateadd(hour, ...)。分钟也很容易。不过,您自己应该很容易理解该消息。
  • 顺便说一句,你不应该这样做datetimecolumn Between '2022-01-02 18:00:00' AND '2022-01-03 18:00:00' - 你应该使用datetimecolumn >= '2022-01-02 18:00:00' AND datetimecolumn < '2022-01-03 18:00:00'
  • @MartinSmith 为什么<>between 好?

标签: sql sql-server datetime


【解决方案1】:

最好使用 DATEADD() 函数将时间添加到您想要的日期。在这个例子中,它从第一个数字中减去 6 小时得到昨天的 18:00,然后加上 18 小时得到今天的 18:00。

DECLARE @today date = GETDATE();
SELECT * FROM mytab WHERE datetimecolumn Between DATEADD(hour,-6,@today) And DATEADD(hour,18,@today);

【讨论】:

  • 没错,马丁,我编辑它以使用@today 变量,这样它就不会捕捉时间
  • 您现在将遇到另一个问题。 The datepart hour is not supported by date function dateadd for data type date. 你可以把 DECLARE @today date = GETDATE(); 改成 DECLARE @today datetime = CAST(GETDATE() AS DATE);
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多