#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. Вы должны быть в состоянии использовать этот диктующий формат ваших дат.