2015-04-14 2 views
0

У меня есть таблица, в которой есть список некоторых событий с датами. Я пытаюсь написать хранимую процедуру, которая вернет только предстоящие события.Сравнение дат с текущей датой на сервере Sql

Я написал следующий запрос в хранимой процедуре:

SELECT  * 
FROM  Events 
WHERE  tDate >= (select CAST(GETDATE() as DATE)) 

Но это не возвращает правильный результат. Это также показывает результаты, которые имеют даты меньше текущей даты. Как написать запрос, который вернет все события с датой, равной или большей, чем сегодняшняя дата.

Редактировать: Даты, введенные в таблицу, имеют формат yyyy/dd/mm и getdate() возвращает дату в формате yyyy/mm/dd. Я думаю, что это вызывает проблему. Даты, которые были введены в таблицу, были сделаны с использованием jquery date picker. Любое решение этой проблемы?

+0

"... больше, чем сегодняшняя дата" - использовать "больше чем" (>) вместо того, чтобы «больше чем или равно "(> =) – Joe

+0

Что случилось с просто' WHERE tDate> GETDATE() '? –

+0

вопрос не сразу понятен, но я полагаю, что часть времени? –

ответ

1

ваши данные DATE неправильно хранятся в Sql Server. Когда ваше приложение передает строку '2015-09-04', и вы сохраняете этот столбец даты, он сохраняется как 4 сентября 2015 года, а не 9 апреля 2015 года. Следовательно, ваш запрос возвращает такие строки, которые больше, чем GETDATE().

Пример

DECLARE @D VARCHAR(10) = '2015-09-04' 
SELECT CONVERT(VARCHAR(20),CONVERT(DATE,@D),109) 

вы должны исправить свои данные, а затем использовать CONVERT со стилем при сохранении даты в таблице из приложения, используя что-то вроде этого. CONVERT(DATE, '20150409',112)

DECLARE @D VARCHAR(10) = '20150409' 
SELECT CONVERT(VARCHAR(20),CONVERT(DATE,@D,112),109) 

См эти темы для получения дополнительной информации:

Impossible to store certain datetime formats in SQL Server

Cast and Convert

0

Не знаю, почему у вас есть дополнительный выбор

SELECT  * 
FROM  Events 
WHERE  tDate >= CAST(GETDATE() as DATE) 
Смежные вопросы