Запрос сравнения дат в 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 ответов:
вместо '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')