SQL-запрос в SQL SERVER 2005 - Сравнение дат - PullRequest
2 голосов
/ 05 октября 2009

Мне сложно выполнить этот запрос. Я хочу сравнить даты в моем запросе, даты из моей БД имеют следующий формат:
(ММ / ДД / ГГГГ ЧЧ: ММ: СС AM)
Я хочу сравнить эту дату с завтрашним днем, сегодня плюс один.
Мои вопросы:

Как объявить завтрашнюю дату на сервере sql?
Как бы вы сравнили эти две даты?

Спасибо! = D

РЕДАКТИРОВАТЬ: ДАТЫ в БД являются VarChar = S

Ответы [ 4 ]

5 голосов
/ 05 октября 2009

Предполагается тип данных datetime для столбцов

WHERE
   MyCol >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1)
   AND
   MyCol < DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2)

Это (гггг-мм-дд) удаляет компонент времени для проверки MyCol завтра

2009-10-06 00:00:00 <= MyCol <2009-10-07 00: 00: 00 </p>

Вы не убираете время из MyCol: это повлияет на производительность и запретит использование индекса и т. Д.

Эффективность удаления времени из вопроса даты и времени , поэтому я использовал этот формат и избегаю преобразований varchar ...

Edit:

Как избежать неявных преобразований и сопоставления строк

10/06/2009 <= MyCol <10/07/2009 </p>

WHERE
   MyCol >= CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 1), 101)
   AND
   MyCol < CONVERT(char(10), DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 2), 101)

Конечно, он потерпит неудачу в конце декабря ...

5 голосов
/ 05 октября 2009

объявить завтрашнюю дату: DATEADD(dd,1,getdate())

сравнить даты:

WHERE column >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 102))
    AND column < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 102))
1 голос
/ 05 октября 2009

Я думаю, что ваши даты, скорее всего, будут в типе даты и времени SQL Server, и что формат, который вы даете, это просто строковое представление по умолчанию.

Обычно я использую что-то вроде:

SELECT *
FROM tbl
WHERE datecol = CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101))

Однако, если ваши даты и время включают время, вам нужно использовать что-то вроде этого:

SELECT *
FROM tbl
WHERE datecol >= CONVERT(datetime, CONVERT(varchar, DATEADD(day, 1, GETDATE()), 101))
    AND datecol < CONVERT(datetime, CONVERT(varchar, DATEADD(day, 2, GETDATE()), 101)) 

Существуют и другие арифметические приемы с датами, которые вы можете использовать. Здесь так много всего, если вы ищете даты SQL

0 голосов
/ 05 октября 2009

SQL Server позволяет объявлять переменные

DECLARE @TomorrowsDate DateTime

И вы можете установить его на текущую дату и время

SET @TomorrowsDate = DATEADD (Day, 0, GETDATE())

На завтрашнюю дату (без времени)

SET @TomorrowsDate = DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101))

Чтобы использовать его в запросе со столбцом без объявления переменной

SELECT Column1, Column2
FROM YourTableName
WHERE DateColumn BETWEEN DATEADD (Day, 0, CONVERT (VARCHAR, GETDATE(), 101)) 
    AND DATEADD (Day, 1, CONVERT (VARCHAR, GETDATE(), 101))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...