"DATE" 不是一个被认可的内置函数名。

13
我希望找到当前日期的所有记录。我有一个类型为DATE的字段“Date”。我在SQL服务器上遇到错误。
'DATE' is not a recognized built-in function name.

在这一行上

(DATE(EnterDate) = CURDATE() )

2
DATE不是一个函数,CURDATE()也不是;where EnterDate = GETDATE() - Alex K.
2
如果EnterDate是一个DATE数据类型,为什么需要DATE()函数(这个函数并不存在)? - Lamak
1
你看过日期和时间数据类型及函数了吗?其中没有列出DATE函数或CURDATE() - Martin Smith
5个回答

20

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

WHERE EnterDate = CONVERT(date,GETDATE())

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


我知道使用CAST()函数对日期数据类型列进行转换可以使查询可Sargable,那么在使用CONVERT()函数的情况下也是这样吗? - M.Ali
我不确定,但是既然CASTCONVERT在日期/时间类型上的工作方式相同,那么它们应该没有区别。 - D Stanley
建设性的批评:请看这里http://msmvps.com/blogs/robfarley/archive/2010/01/22/sargable-functions-in-sql-server.aspx - M.Ali
1
@M.Ali 这个示例展示了如何使用CONVERT从日期时间类型转换为字符类型。相比之下,CONVERT支持多种格式,因此工作方式不同,显然并不是SARGable的。 根据 这个答案 ,从datetimedate的转换是SARGable的。 - D Stanley
谢谢你提供的链接和解释。 - M.Ali

4

在where子句中使用以下条件

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

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


1
我有一个类型为DATE的字段Date。 - Lamak
@Lamak 我理解,但当用户尝试使用'CURDATE()'函数获取今天的日期时,我发现很难相信他声称在“DATE”数据类型中拥有的列真的是日期数据类型 :) - M.Ali

3
更高效的一个是
WHERE EnterDate > DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE()))

感谢 @D Stanley、@marc_S 和 @Mihai


0

这不是确切的答案,而是一个从日期时间变量中截取时间部分的示例

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


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接