составление SQL-запроса со смещением даты - PullRequest
1 голос
/ 23 марта 2011

Я пытаюсь сделать это:

select * from table 
where ChangingDate(this is a column which has date and time) = today's date + 1

Я изучаю SQL, и я плохо разбираюсь в форматах дат.Я ценю, если кто-то может помочь.

Спасибо!

Ответы [ 5 ]

5 голосов
/ 23 марта 2011

Это вернет завтрашние данные

WHERE ChangingDate > = dateadd(dd, datediff(dd, 0, getdate())+1, 0)
and ChangingDate < dateadd(dd, datediff(dd, 0, getdate())+2, 0)

Это вернет сегодняшние данные

WHERE ChangingDate > = dateadd(dd, datediff(dd, 0, getdate())+0, 0)
and ChangingDate < dateadd(dd, datediff(dd, 0, getdate())+1, 0)

См. Также Как работает между датами в SQL Server?

5 голосов
/ 23 марта 2011

В базах данных есть хитрость - вам почти никогда не нужно сравнивать, потому что, как вы видели, они также включают компонент времени. Вместо этого вы хотите знать, попадает ли он в диапазон, включающий весь день. Sql Server 2008 имеет новый тип date, который помогает с этим, но пока вы не обновитесь, сделайте это так:

WHERE (ChangingDate >= dateadd(dd,1, datediff(dd,0, getDate())) 
       AND ChangingDate < dateadd(dd,2, datediff(dd,0, getDate())))

Вы можете сделать сравнение на равных, если вы уверены , что все записи имеют значение 0 (или другое известное значение) для компонента времени в этом столбце. То, что вы не хотите делать, это обрезать столбец, потому что это означает выполнение дополнительной работы с каждой записью (медленно) и нарушит ваш индекс (очень медленно).

1 голос
/ 23 марта 2011
select *
  from MyTable
 where DATEADD(dd, 0, DATEDIFF(dd, 0, ChangingDate)) = SELECT DATEADD(dd, 1, DATEDIFF(dd, 0, GETDATE()))
0 голосов
/ 23 марта 2011

Звучит так, как будто вы хотите, чтобы функция DATEPART находила, где в столбце дата указан один и тот же год, месяц и день, независимо от времени дня:

SELECT * FROM Table 
WHERE 
    DATEPART(Month, Date) = DATEPART(Month, @SomeDate) 
AND DATEPART(Day, Date) = DATEPART(Day, @SomeDate) 
AND DATEPART(Year, Date) = DATEPART(Year, @SomeDate)

В противном случае вы хотите использовать DateAdd, как и другие постеры.

0 голосов
/ 23 марта 2011

Вы можете попробовать что-то вроде

select * from table where columndate=GetDate() + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...