所以我试图过滤日期,但是例如,当我输入下面的代码时,无论年份如何,我都会在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;
答案 0 :(得分:4)
如果TicketDate
不是date
数据类型,则需要将其转换为1。
此外:SQL Server中日期/时间文字的唯一真正安全格式,至少对于datetime
和smalldatetime
,是:YYYYMMDD
和YYYY-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;
此外,始终包含varchar
和nvarchar
的尺寸。
varchar
或nvarchar
变量/参数提供长度。