Тип данных 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'), асцибетическая сортировка будет совместима с сортировкой по датам, и у вас не возникнет проблем.