解决SQL Server中的日期时间之谜

时间:2019-05-13 13:51:24

标签: sql datetime

我对此并不陌生,如果您能帮助我了解如何解决SQL Server中datetime格式的问题,我将不胜感激。

我正在尝试查找一些特定日期的唯一订单:

select count(distinct(ID))
from dbo.Orders 
where CompletdDate like '2019-05-10%'

但是发生了错误:

  

Msg 207,第16层,状态1,第53行
  无效的列名“ CompletdDate”。

也许有人会知道如何解决这个问题?有人说我应该发表声明,但我不知道,如何以及为什么?

非常感谢。

3 个答案:

答案 0 :(得分:3)

如果CompletdDate实际上是一个日期列,那么您应该检查是否相等:

SELECT COUNT(DISTINCT ID)
FROM dbo.Orders
WHERE CompletdDate = '2019-05-10';

如果CompletdDate是日期时间,并且您想限制为给定日期,则可以尝试投射:

WHERE CONVERT(date, CompletdDate) = '2019-05-10';

或者可以使用范围:

WHERE CompletdDate >= '2019-05-10' AND CompletdDate < '2019-05-11';

注意:看到戈登的回答后,也许CompletdDate应该是CompletedDate。但这只是一个错字,而不是查询的主要结构性问题。

答案 1 :(得分:0)

您有多个错误。首先,您不应该在日期上使用字符串操作。 SQL Server具有良好的日期功能。

您输入的列名称错误。我对此无能为力。但是查询应该看起来像这样:

select count(distinct o.ID))
from dbo.Orders o
where convert(date, CompletedDate) = '2019-05-10'
---------------------------^ maybe the "e" was missing

答案 2 :(得分:0)

select count(distinct(ID)) from dbo.Orders where
TRY_CONVERT(VARCHAR(10), CompletdDate, 105) = '10-05-2019'

如果CompletdDate为null,并且您使用convert或其他强制转换函数,则查询将出错。您应该使用TRY_CONVERTTRY_CAST,因为当列无法转换时此函数返回null