Сравнение дат в 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-04-12)

Может быть, это только сравнение дневной части? а не целую дату?

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

Created_date имеет дату типа

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

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

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

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

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

РЕДАКТИРОВАТЬ

Поскольку вы используете 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' 

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

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

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

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

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

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

Попробуйте использовать «#» до и после даты и не забудьте указать формат вашей системы. возможно, «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# 

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

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

  • SQL SERVER: получение общих дней между двумя датами
  • Преобразовать, например. 2012-05-25 - секунды с 1 января 1970 г.
  • Ошибка конвертации даты .: yyyy / MM / dd to dd / MM / yyyy
  • Как получить дату начала текущей недели в SQL Server 2008?
  • Рассчитать последний день квартала
  • SQL Преобразование каждого диапазона дат в каждую строку дня
  • SQL - возвращает только тогда, когда строки не имеют значения
  • T-SQL Count записей в состоянии для предыдущих месяцев
  • SQL Выбор записей с датами, не включенными в диапазон дат
  • SET DATEFIRST в ФУНКЦИИ
  • Как исключить выходные дни в запросе SQL Server?
  • Interesting Posts

    SQL Server 2008 – установить значение, когда столбец равен нулю

    Как вставить INSERT дату в столбец базы данных SQL, используя dateTimePicker?

    Передача имен параметров хранимой процедуры SQL Server через Delphi

    Использование SQL для преобразования / сглаживания структуры XML в столбцы

    SQL-запрос и специальные символы

    Запрос Sql с предложением «IN» на двух таблицах и столбцах

    Как я правильно использую Row_Number () (разбиение) для моего файла данных

    SQL Get aggregate as 0 для не существующей строки с использованием внутренних соединений

    C # При создании таблицы я получаю ошибку «неправильного синтаксиса», если имя моего столбца / поля содержит деление «-»

    Репликация сервера sql – получить последнюю дату синхронизации из запроса

    Не удается найти хранимую процедуру (используя схемы)

    Загрузки в таблицу памяти медленнее, чем на основе диска

    Получать рассчитанные значения с использованием совокупной ставки / процента

    Где я могу создать соль паролей?

    Сохраненная процедура SQL Server с параметром Float и передача десятичной

    Давайте будем гением компьютера.