Sql “datetime”不是可识别的内置函数名

Sql “datetime”不是可识别的内置函数名,sql,sql-server,sql-server-2019,Sql,Sql Server,Sql Server 2019,下面是我在chinook DB上尝试的查询,但我得到了这个错误。请帮我解决这个问题? 错误==>“datetime”不是可识别的内置函数名 选择counti.invoiceid,sumi.total 从发票上我 其中i.发票日期介于日期时间'2011-01-01 00:00:00'和日期时间'2011-12-31 00:00:00'之间 SQL Server自动将正确格式的字符串转换为日期时间: 这在datetime的文档中 它还会自动将格式正确的字符串转换为日期: 对于除1之外的几乎所有国际化

下面是我在chinook DB上尝试的查询,但我得到了这个错误。请帮我解决这个问题? 错误==>“datetime”不是可识别的内置函数名

选择counti.invoiceid,sumi.total 从发票上我 其中i.发票日期介于日期时间'2011-01-01 00:00:00'和日期时间'2011-12-31 00:00:00'之间
SQL Server自动将正确格式的字符串转换为日期时间:

这在datetime的文档中

它还会自动将格式正确的字符串转换为日期:

对于除1之外的几乎所有国际化设置,它还接受日期的连字符:

我个人喜欢连字符,因为它可读性好,符合ISO 8601标准。其他人不喜欢使用连字符,因为这是SQL Server标准。这确实是个人喜好

如果您确实想具体说明,也可以使用convert:

where i.invoicedate between convert(date, '2011-01-01', 120) and convert(date, '2011-12-31', 120)
在你的背景下,你似乎只需要约会。但是,您还建议invoicedate实际上是datetime。那么你应该注意时间成分。我的建议是避免在日期/时间值之间切换

所以,我怀疑你真的打算:

where i.invoicedate >= '2011-01-01') and 
      i.invoicedate < '2012-01-01'

这将包括2011年12月31日发送的所有发票-这适用于日期和日期时间值。

是什么让您认为日期时间是一个函数?您不需要这些来生成日期时间文本,只需使用引号“2011-12-31…”注意,此查询将错过2011年的最后一天,您可能需要i.invoicedate>='2011-01-01 00:00:00'和i.invoicedate<'2012-01-01 00:00:00'datetime不是sql server上的数据类型。请使用转换函数,然后重试。例如:选择CONVERT Varchar、GETDATE、,103@senthilkumar2185考虑到OP试图比较,而不是显示,那么转换是个坏主意。您应该始终指定varchar length注意,对于datetime和smalldatetime,格式yyyy-MM-dd hh:MM:ss是不明确的。您最好使用yyy-MM-ddThh:MM:ss。因为您似乎正在学习tsql,现在是阅读有关更改数据类型的函数的文档的好时机。但是,正如前面提到的,如果您的文本处于有效且安全的状态,则不需要使用它们!总体安排我希望invoicedate实际上是一个日期列,而不是datetime。
where i.invoicedate between '2011-01-01' and '2011-12-31'
where i.invoicedate between convert(date, '2011-01-01', 120) and convert(date, '2011-12-31', 120)
where i.invoicedate >= '2011-01-01') and 
      i.invoicedate < '2012-01-01'