Сравнение дат в Sql

#sql

#sql

Вопрос:

У меня возникли проблемы при попытке сравнить даты в моем sql-запросе:

 SELECT restrictions, restrictions_adddate FROM restrictions WHERE id = '555555'
AND restrictions_adddate BETWEEN ? and ?;
  

Оба параметра система выводит в формате ‘мм-дд-гггг’. Я получаю ошибку неправильного формата даты, но пробовал делать это несколькими способами. Приветствуется любая помощь, и если потребуется дополнительная информация, пожалуйста, дайте мне знать. Спасибо.

Комментарии:

1. вы также пробовали формат «гггг-мм-дд»?

2. да, я тоже пробовал это, я получаю ошибку «литерал не соответствует строке».

3. @a_horse_with_no_name , Oracle11g

Ответ №1:

Это должно работать на любой стандартной СУБД:

 SELECT restrictions, restrictions_adddate 
FROM restrictions 
WHERE id = '555555'
  AND restrictions_adddate BETWEEN DATE '2011-01-01' and DATE '2011-12-31';
  

Комментарии:

1. @Dems: это неправда. Формат DATE '2011-01-01' определяется стандартом ANSI таким образом, что литерал должен быть в формате ISO (гггг-мм-дд). Если вы опустите ключевое слово DATE , то вы абсолютно правы.

2. @a_horse_with_no_name: На самом деле это правда. SQL Server в режиме британского английского языка интерпретирует этот формат как ‘гггг-дд-мм’, если вы не добавите временную часть, например, «2012-07-13T00:00:00»

3. @Trekstuff: тогда SQL Server сильно нарушает стандарт.

Ответ №2:

Это мое предпочтение:

 AND restrictions_adddate BETWEEN
    CONVERT(datetime, FLOOR(CONVERT(float, CAST('01-01-1900' AS DATETIME))))
    AND CONVERT(datetime, FLOOR(CONVERT(float, Getdate())));
  

Это позволяет сравнивать даты (за вычетом временных меток).

Комментарии:

1. Я пробовал это, но я незнаком с большинством терминов. Как именно это происходит при сравнении дат?

2. Он сопоставляет дату со временем и удаляет временную часть. что на самом деле не соответствует вашему вопросу.

3. @Dems, вопрос заключался в том, как сравнить две даты. Независимо от того, удаляю я время или нет, это то, что делает код. Мой пример показывает, как использовать текущую дату, а также любую дату, которую вы хотите вставить в виде строки — ’01-01-1900′.

Ответ №3:

Попробуйте проверить CONVERT ссылку на функцию T-SQL в BOL. Вы должны быть в состоянии использовать этот диктующий формат ваших дат.