Запрос сравнения дат в SQL


У меня есть таблица с датами, что все произошло в месяце ноябре. Я написал этот запрос

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-04-12'

этот запрос должен возвращать все, что произошло в месяце 11 (ноябрь), потому что это произошло до дата ' 2013-04-12 '(в декабре)

но это только возвращение доступных дат, которые произошли в дни меньше, чем 04 (2013 -04-12)

может быть, это только сравнивая дня? и не весь свидание?

Как это исправить?

Created_date типа дата

формат даты по умолчанию гггг-ДД-ММ

7 51

7 ответов:

вместо '2013-04-12', значение которого зависит от местной культуры, используйте '20130412', который признан инвариантным форматом культуры.

Если вы хотите сравнить с 4 декабря - е, вы должны написать '20131204'. Если вы хотите сравнить с 12 апреля - е, вы должны написать '20130412'.

статьи написать международные инструкции Transact-SQL из документации SQL Server объясняется, как писать инструкции, которые являются инвариант культуры:

приложения, использующие другие API или скрипты Transact-SQL, хранимые процедуры и триггеры, должны использовать неразделенные числовые строки. Например, ггггммдд, как 19980924.

EDIT

поскольку вы используете ADO, лучшим вариантом является параметризация запроса и передача значения даты в качестве параметра даты. Таким образом, вы полностью избегаете проблемы с форматом и получаете преимущества производительности параметризованного и запросы тоже.

обновление

чтобы использовать формат ISO 8601 в литерале, необходимо указать все элементы. Цитировать из раздела ISO 8601 документации datetime

чтобы использовать формат ISO 8601, необходимо указать каждый элемент в формате. Это также включает в себя T, двоеточия (:) и период (.) которые показаны в формате.

... доля второго компонента необязательный. Компонент времени задается в 24-часовом формате.

попробуйте вот так

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-12-04'

ставишь <= и он будет ловить заданную дату тоже. Вы можете заменить его на < только.

Если вы сравниваете только с датой vale, то преобразование его в дату (не datetime) будет работать

select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= convert(date,'2013-04-12',102)

это преобразование также применимо во время использования GetDate () функции

пожалуйста, попробуйте ниже запрос

select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
convert(datetime, convert(varchar(10), created_date, 102))  <= convert(datetime,'2013-04-12')

попробуйте использовать " # " до и после даты и убедитесь, что ваш формат даты системы. может быть, "ГГГГММДД О'гггг-ММ-ДД О'ММ-ДД-гггг о помощью '/ о \' "

Ex:

 select id,numbers_from,created_date,amount_numbers,SMS_text 
 from Test_Table
 where 
 created_date <= #2013-04-12#

формат даты гггг-ММ-ДД. Таким образом, приведенный выше запрос ищет записи старше 12Apr2013

предлагаю вам сделать быструю проверку, установив строку даты в '2013-04-30', если нет ошибки sql, формат даты подтверждается на гггг-ММ-ДД.