Подтвердить что ты не робот

Сравнение дат в 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 имеет тип date

Формат даты по умолчанию yyyy-dd-MM

4b9b3361

Ответ 1

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

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

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

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

ИЗМЕНИТЬ

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

UPDATE

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

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

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

Ответ 2

Попробуйте это

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

Ответ 3

Вы помещаете <=, и он тоже поймает данную дату. Вы можете заменить его только <.

Ответ 4

попробуйте выполнить ниже запрос

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')

Ответ 5

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

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

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

Ответ 6

Попробуйте использовать "#" до и после даты и не забудьте указать формат вашей системной даты. возможно, "YYYYMMDD O YYYY-MM-DD O MM-DD-YYYY O ИСПОЛЬЗОВАНИЕ '/O \'"

Пример:

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

Ответ 7

Формат даты - yyyy-mm-dd. Таким образом, вышеупомянутый запрос ищет записи старше 12Apr2013

Предложите вам выполнить быструю проверку, установив строку даты на "2013-04-30", если нет ошибки sql, формат даты подтвержден до yyyy-mm-dd.