У меня есть таблица с датами, которые все происходили в ноябре. Я написал этот запрос
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
Формат даты по умолчанию - гггг-дд-мм.
sql
sql-server
date
compare
Помощь
источник
источник
2013-04-12
? 12 апреля? А может бытьcreated_date
, это строка, а не дата?Ответы:
Вместо «2013-04-12», значение которого зависит от местной культуры, используйте «20130412», который распознается как инвариантный формат языка.
Если вы хотите сравнить с декабря 4 - го , вы должны написать «20131204». Если вы хотите сравнить с апреля 12 - го , вы должны написать «20130412».
В статье « Написание международных операторов Transact-SQL» из документации SQL Server объясняется, как писать операторы, которые не зависят от языка и региональных параметров:
РЕДАКТИРОВАТЬ
Поскольку вы используете ADO, лучшим вариантом является параметризация запроса и передача значения даты в качестве параметра даты. Таким образом, вы полностью избегаете проблемы с форматированием и получаете преимущества в производительности параметризованных запросов.
ОБНОВИТЬ
Чтобы использовать формат ISO 8601 в литерале, необходимо указать все элементы. Цитата из раздела ISO 8601 документации datetime
источник
To use the ISO 8601 format, you must specify each element in the format. This also includes the T
.YYYY-MM-DD
это не признанную в качестве ISO 8601. Время детали будут необходимы. Назовите это странностью T-SQL, если хотите, или неполной реализацией. Возможно даже, что это было перенесено из SybaseПопробуйте вот так
select id,numbers_from,created_date,amount_numbers,SMS_text from Test_Table where created_date <= '2013-12-04'
источник
Если Вы сравниваете только с датой юдоли, а затем преобразовать его в актуальном состоянии (не даты и времени ) будет работать
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')
источник
Формат даты - гггг-мм-дд. Таким образом, приведенный выше запрос ищет записи старше 12 апреля 2013 г.
Предлагаем вам выполнить быструю проверку, установив строку даты на «2013-04-30», если нет ошибки sql, формат даты подтверждается на гггг-мм-дд.
источник
Попробуйте использовать "#" до и после даты и убедитесь, что ваш системный формат даты. возможно «ГГГГММДД О ГГГГ-ММ-ДД О ММ-ДД-ГГГГ О ИСПОЛЬЗОВАНИЕ '/ О \'»
Пример:
select id,numbers_from,created_date,amount_numbers,SMS_text from Test_Table where created_date <= #2013-04-12#
источник