SQLite меньше, чем проблема оператора - PullRequest
4 голосов
/ 04 мая 2011

Я использую SQLite для проекта, и символ <не работает в запросе. </p>

Существует таблица с именем Holidays, имеющая поле типа данных datetime.

Предположим, таблица содержитнекоторые даты текущего года в столбце HolidayDate.

SELECT HolidayDate
  FROM Holidays
 WHERE (HolidayDate >= '1/1/2011')
   AND (HolidayDate <= '1/1/2012')

Символ <в приведенном выше запросе не работает.> Символ в приведенном выше запросе работает хорошо.

Пожалуйста, помогите мне.

Ответы [ 2 ]

13 голосов
/ 04 мая 2011

Попробуйте:

SELECT HolidayDate
  FROM Holidays
 WHERE HolidayDate >= date('2011-01-01')
   AND HolidayDate <= date('2012-01-01')

(формат даты должен быть YYYY-MM-DD)

4 голосов
/ 04 мая 2011

Тип данных datetime в sqlite отсутствует.

Sqlite имеет только 4 типа:

  • целое число
  • число с плавающей точкой
  • строка (сохраняется как utf-8 или utf-16 и автоматически конвертируется)
  • 1012 * блоб *

Кроме того, sqlite имеет тип манифеста, что означает, что любой столбец может содержать значение любого типа. Объявленный тип используется только для двух вещей:

  • вставленные значения преобразуются в указанный тип , если они кажутся конвертируемыми (и, похоже, они вообще не применяются к значениям, связанным с sqlite_bind_* методами)
  • он как-то намекает на индексатор или оптимизатор (я просто знаю, что у него проблемы с использованием индексов, когда столбец не напечатан)

Еще хуже, sqlite будет молча принимать что-нибудь в качестве типа. Он будет интерпретироваться как целочисленный тип, если он начинается с «int», как строка, если он содержит «char» или «text», как число с плавающей запятой, если оно «real», «double» или «number» и как blob если это "капля". В других случаях столбец просто нетипизирован, что не создает проблем для sqlite, учитывая, как мало значит печатание.

Это означает, что «01.01.2011» - это просто строка, и ни даты в формате «мм / дд / гггг», ни даты в формате «дд / мм / гггг» не сортируются по дате, когда сортируются асибетически (на самом деле юникодебетически).

Если вы сохранили даты в формате ISO ('yyyy-mm-dd'), асцибетическая сортировка будет совместима с сортировкой по датам, и у вас не возникнет проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...