为什么我的查询返回的记录不符合 where 子句条件?



我写了一个查询,它返回的日期实际上早于上述日期的记录。

Declare @DateFrom date
Set @DateFrom= '02/Oct/2019'
SELECT 1, Convert(varchar(11), AppliedDateTime, 106)
FROM [MC_Tenders].[dbo].[AppliedWorks]
Where 
Convert(varchar, AppliedDateTime,106) >= Convert(varchar, @DateFrom,106)

应用的日期作为日期时间保存在表格中,例如 2017-04-25 15:51:25.257

您正在将比较作为字符串而不是日期。 删除转换:

SELECT 1, Convert(varchar(11), AppliedDateTime, 106)
FROM [MC_Tenders].[dbo].[AppliedWorks]
WHERE AppliedDateTime >= @DateFrom;

106型dd mm yyyy. 作为字符串进行比较时,将比较字符串,而不是日期。 使用格式 106,首先比较天数,因此:'18-10-2017' < '25-12-1900',因为"1"<</p>

"2"。

为了完成Gordon Linoff的想法,你的代码应该看起来像这样:

SELECT 
  1
  , CAST(AppliedDateTime AS DATE) AS AppliedDate
FROM 
  [MC_Tenders].[dbo].[AppliedWorks]
WHERE 
  CAST(AppliedDateTime AS DATE) >= @DateFrom;

编辑:我假设ApplyDateTime实际上存储为日期时间,或DATE以外的某些数据类型。显式 CAST 到 DATE 类型将去除时间部分,并允许 SQL 仅将日期组件与变量进行比较。

最新更新