【问题标题】:'DATE' is not a recognized built-in function name'DATE' 不是可识别的内置函数名称
【发布时间】:2014-01-25 05:34:55
【问题描述】:

我希望找到当天的所有记录。我有一个日期类型为 DATE 的字段。 我在 sql server 上遇到错误

'DATE' is not a recognized built-in function name.

在这条线上

(DATE(EnterDate) = CURDATE() )

【问题讨论】:

  • DATE 不是函数,CURDATE() 也不是; where EnterDate = GETDATE()
  • 如果EnterDate 是DATE 数据类型,为什么它需要DATE() 函数(不存在)
  • 你看过Date and Time Data Types and Functions吗? DATE 函数或 CURDATE() 均未列出。

标签: sql sql-server sql-server-2008 sql-server-2012 ssms


【解决方案1】:

如错误所述,SQL Server 2008 或 2012 中没有 DATE 函数(您同时标记了两者,因此我不确定您的目标是哪一个)。但是,您可以在 SQL Server 2008 及更高版本中强制转换为 date 类型:

WHERE EnterDate = CONVERT(date,GETDATE())

请注意,也没有 CURDATE 函数,所以我已将其翻译为 GETDATE()

【讨论】:

  • 我知道一个事实,在日期数据类型列上使用 CAST() 函数可以让您的查询成为 Sargable 在 CONVERT() 函数的情况下也是如此吗??
  • 事实上我不反对,但由于 CAST 和 CONVERT 对于日期/日期时间类型的工作方式相同,因此应该没有区别。
  • @M.Ali 该示例显示使用 CONVERT 从日期时间转到 character 类型,其中 CONVERT 确实 工作方式不同(通过支持多种格式)并且显然不是 SARGable。计算从datetime 到date 到this answer 的转换是可搜索的。
  • 感谢您的链接和解释。
【解决方案2】:

在你的 where 语句中使用以下条件

WHERE CAST(DateColumn AS DATE) = CAST(GETDATE() AS DATE)
              ^------------ Your Column Name with `Date` or 'DateTime'  data type

CURDATE() 是一个 mysql 函数,在 Sql-Server 中我们有 GETDATE() 函数来获取当前日期和时间。

【讨论】:

  • “我有一个日期类型为 DATE 的字段”,表示无需将该列转换为 DATE
  • @Lamak 我明白这一点,但是当用户尝试使用 'CURDATE()' 函数来获取今天的日期时,我发现很难相信他声称在 DATE 数据中拥有的列type 确实是 Date 数据类型 :)
【解决方案3】:

更高效的是

WHERE EnterDate > DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE()))

感谢@D Stanley @marc_S 和 @Mihai

【讨论】:

    【解决方案4】:

    我终于搞定了
    WHERE EnterDate > Convert(DATETIME,Convert(varchar,DATEADD(DAY,0,GETDATE()),101))

    【讨论】:

      【解决方案5】:

      这不是确切的答案,而是如何从日期时间变量中修剪时间部分的示例

      CONVERT(VARCHAR(10),date_manufactured,10) =CONVERT(VARCHAR(10),@startdate,10))

      【讨论】:

        猜你喜欢
        • 2014-06-12
        • 2017-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多