2015-08-26 7 views
0

Я пытаюсь сравнить время в моем SQL-запросе. Однако, когда я запускаю запрос, я получаю нулевой результат, но я вижу, что в таблице есть записи, которые должны появиться.SQL Server: Сравнение времени

Запрос как таковой:

SELECT * 
FROM dbo.Alarms 
WHERE StartDate <= '26/08/2015' 
    AND StartTime <= CONVERT(varchar(5), GETDATE(), 108) 

StartDate хранится в базе данных как YYYY-MM-DD и, кажется, работает хорошо, когда я запрашиваю только с датой.

Однако, когда я добавляю StartTime, когда все не работает. StartTime сохраняет значение в формате 24-часовой синхронизации.

Что не так?

Благодаря

+0

Опубликовать типы данных, которые являются StartDate и StartTime. Если они «VARCHAR», вы должны знать, что это плохая идея. –

ответ

2

Используйте правильный формат DATETIME:

SELECT * 
FROM dbo.Alarms 
WHERE StartDate <= '2015-08-26' AND StartTime <= cast(GETDATE() as date) 

Не сравнить значения даты/времени в виде строк. Типы данных встроены в язык. Используй их.

+0

Я попробовал это и понял, что моя структура таблицы не совсем правильная. Я не могу сравнивать дату и время в отдельных полях. Я попытаюсь создать новое поле типа datetime и посмотреть, могу ли я сравнить его. – Saj

+0

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

0

Я не использовал этот сценарий явно, но сравнение дат может быть проблемой в зависимости от того, как сравниваются поля.

eg: '28/07/2015' не меньше нуля, так как 28 > 26.

Вы можете попробовать сравнить даты, отформатированные в формате YYYYMMDD.

Cheers.

+0

Чтение ваших комментариев заставило меня подумать об одном аспекте, который я не принимал во внимание. Я не думаю, что могу запустить это утверждение как таковое, потому что если начальная дата меньше, чем сегодня, то время не имеет значения. Время имеет значение только в том случае, если начальная дата равна сегодняшнему. Я попытаюсь создать новое поле с типом datetime вместо разделения двух – Saj