SQL между оператором - PullRequest
       2

SQL между оператором

1 голос
/ 30 октября 2010

Почему я получаю данные за 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') 

Ответы [ 4 ]

11 голосов
/ 30 октября 2010

Вы делаете сравнение строк, которое идет слева направо.'04 / 10/2009 'находится между '04 / 0' и '04 /3 '.

Если сравниваемое поле является DATETIME, не пытайтесь преобразовать его.SQL-сервер может преобразовать строки в даты и правильно выполнить сравнение.

5 голосов
/ 30 октября 2010

Если вы используете поддерживаемый формат даты, 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' 

Ваш запрос просто сравнивает строки, которые не имеют отношения к диапазонам дат.

0 голосов
/ 30 октября 2010

Вам действительно не нужно все преобразования.Даты из календаря будут иметь правильное время начала и окончания.Вы также хотите учитывать события, которые могут проходить после даты окончания или начинаться до даты и заканчиваться в пределах диапазона дат.Или, наконец, начать раньше и пройти мимо ...

Вот код, который мы используем

    (EventStartDtTm >= startDt and EventStartDtTm <= endDt) 
 || (EventStartDtTm <= startDt and EventEndDtTm >= startDt)

- patrick

0 голосов
/ 30 октября 2010

Ваше предложение WHERE может выполнять сравнение строк вместо сравнения дат.Если вы хотите сделать сравнение дат, вы можете изменить

CONVERT(varchar, EventDate, 101)

на

CAST (CONVERT(varchar, EventDate, 101) AS DATETIME)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...