我对此并不陌生,如果您能帮助我了解如何解决SQL Server中datetime
格式的问题,我将不胜感激。
我正在尝试查找一些特定日期的唯一订单:
select count(distinct(ID))
from dbo.Orders
where CompletdDate like '2019-05-10%'
但是发生了错误:
Msg 207,第16层,状态1,第53行
无效的列名“ CompletdDate”。
也许有人会知道如何解决这个问题?有人说我应该发表声明,但我不知道,如何以及为什么?
非常感谢。
答案 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_CONVERT
或TRY_CAST
,因为当列无法转换时此函数返回null