SQL BETWEEN运算符

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可以将字符串转换为日期并正确进行比较.


OMG*_*ies 5

如果使用支持的日期格式,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)

您的查询只是进行字符串比较,这与日期跨度无关.