Yve*_*ves 1 sql t-sql sql-server sql-server-2005
为什么我会收到'2009'数据?我在WHERE条款中做错了什么?
SELECT CONVERT(varchar, EventDate, 101) AS EVENTDATE,
CONVERT(varchar, ClosedDate, 101) AS CLOSEDDATED,
DATEDIFF(Day,EventDate,ClosedDate) AS DiffDate,
FROM mytable
WHERE (CONVERT(varchar, EventDate, 101) BETWEEN '04/01/2010' AND '04/30/2010')
Run Code Online (Sandbox Code Playgroud)
Mar*_*som 11
你正在做一个字符串比较,从左到右.'04/10/2009'介于'04/0'和'04/3'之间.
如果您要比较的字段是DATETIME,请不要尝试转换它.SQL Server可以将字符串转换为日期并正确进行比较.
如果使用支持的日期格式,SQL Server将隐式将字符串转换为DATETIME:
SELECT CONVERT(varchar, EventDate, 101) AS EVENTDATE,
CONVERT(varchar, ClosedDate, 101) AS CLOSEDDATED,
DATEDIFF(Day,EventDate,ClosedDate) AS DiffDate,
FROM mytable
WHERE EventDate BETWEEN '2010-04-01' AND '2010-04-30'
Run Code Online (Sandbox Code Playgroud)
您的查询只是进行字符串比较,这与日期跨度无关.