为什么我的WHERE子句不在我的日期列中过滤年份?

时间:2017-07-06 21:22:47

标签: sql-server tsql

所以我试图过滤日期,但是例如,当我输入下面的代码时,无论年份如何,我都会在7月1日之后得到所有日期。包括2015年和2016年的项目。我做错了什么?原始的TicketDate列是我们数据库中的文本格式,这就是我转换的原因。

SELECT
  EmplCode,
  Comments,
  EmplName,
  CONVERT(NVARCHAR, CAST(TicketDate AS DATE), 1) AS TicketDate,
  CreatedBy,
  ActClockInTime,
  ActClockOutTime,
  AdjClockInTime,
  AdjClockOutTime,
  ROUND(TotActTime, 2) AS ActualTime,
  ROUND(TotAdjTime, 2) AS AdjActualTime,
  PayrollRate,
  OverTime,
  Holiday,
  GLAcct
FROM AttendDet
WHERE 
  EmplCode IS NOT NULL
  AND TicketDate > '07/01/17'
ORDER BY TicketDate;

1 个答案:

答案 0 :(得分:4)

如果TicketDate不是date数据类型,则需要将其转换为1。

此外:SQL Server中日期/时间文字的唯一真正安全格式,至少对于datetimesmalldatetime,是:YYYYMMDDYYYY-MM-DDThh:mm:ss[.nnn] - {{ 3}}

select
  EmplCode,
  Comments,
  EmplName,
  convert(varchar(30), cast(TicketDate as date), 1) as TicketDate,
  CreatedBy,
  ActClockInTime,
  ActClockOutTime,
  AdjClockInTime,
  AdjClockOutTime,
  round(TotActTime, 2) as ActualTime,
  round(TotAdjTime, 2) as AdjActualTime,
  PayrollRate,
  OverTime,
  Holiday,
  glacct
from AttendDet
where EmplCode is not null
  and convert(date,TicketDate) > '20170701'
order by TicketDate;

此外,始终包含varcharnvarchar的尺寸。