我希望找到当前日期的所有记录。我有一个类型为DATE的字段“Date”。我在SQL服务器上遇到错误。
'DATE' is not a recognized built-in function name.
在这一行上
(DATE(EnterDate) = CURDATE() )
'DATE' is not a recognized built-in function name.
在这一行上
(DATE(EnterDate) = CURDATE() )
正如错误所述,在 SQL Server 2008 或 2012 中没有 DATE
函数(您标记了两个版本,因此我不确定您的目标是哪一个)。但是,您可以在 SQL Server 2008 及以上版本中将其转换为 date
类型:
WHERE EnterDate = CONVERT(date,GETDATE())
请注意,也没有CURDATE
函数,所以我已经将其翻译为GETDATE()
CAST()
函数对日期数据类型列进行转换可以使查询可Sargable,那么在使用CONVERT()
函数的情况下也是这样吗? - M.AliCAST
和CONVERT
在日期/时间类型上的工作方式相同,那么它们应该没有区别。 - D StanleyCONVERT
从日期时间类型转换为字符类型。相比之下,CONVERT
支持多种格式,因此工作方式不同,显然并不是SARGable的。
根据 这个答案 ,从datetime
到date
的转换是SARGable的。 - D Stanley在where子句中使用以下条件
WHERE CAST(DateColumn AS DATE) = CAST(GETDATE() AS DATE)
^------------ Your Column Name with `Date` or 'DateTime' data type
CURDATE()
是MySQL中的一个函数,在Sql-Server中,我们有GETDATE()
函数用于获取当前日期和时间。
WHERE EnterDate > DATEADD(dd, -1, DATEDIFF(dd, 0, GETDATE()))
感谢 @D Stanley、@marc_S 和 @Mihai
。这不是确切的答案,而是一个从日期时间变量中截取时间部分的示例
CONVERT(VARCHAR(10),date_manufactured,10) = CONVERT(VARCHAR(10),@startdate,10))
我终于搞定了:
WHERE EnterDate > Convert(DATETIME,Convert(varchar,DATEADD(DAY,0,GETDATE()),101))
where EnterDate = GETDATE()
- Alex K.EnterDate
是一个DATE
数据类型,为什么需要DATE()
函数(这个函数并不存在)? - LamakDATE
函数或CURDATE()
。 - Martin Smith