Ответ 1
SQLite не имеет специального типа DATETIME. Обычно люди делают это, чтобы сохранить дату как форматированную строку, которая является последовательной; например, YYYY-MM-DD hh: mm: ss. Если вы это сделаете, если вы согласны, вы можете напрямую сравнивать даты:
SELECT * FROM a WHERE q_date < '2013-01-01 00:00:00';
Это работает, потому что, хотя сравнение технически является алфавитным, а не числовым, датируется в последовательном формате, подобном этому, как в алфавитном, так и в цифровом формате.
Для такой схемы я предлагаю хранить даты в 24-часовом формате (приведенный выше пример - полночь). Pad месяцев, дней и часов с нулями. Если ваши даты будут охватывать несколько часовых поясов, сохраните их все в UTC и сделайте любое преобразование, которое вам нужно на стороне клиента, чтобы преобразовать их в локальный часовой пояс.
Обычно даты и время сохраняются в одном столбце. Если вы хотите, чтобы они были разделены по какой-либо причине, просто убедитесь, что даты совпадают, и ваши времена все последовательны. Например, даты должны быть YYYY-MM-DD, а время должно быть hh: mm: ss.
Причина, по которой YYYY-MM-DD hh: mm: ss является предпочтительным форматом, состоит в том, что, когда вы переходите с самого большого интервала дат (лет) до наименьшего (секунды), вы можете легко индексировать и сортировать их и с высокая производительность.
SELECT * FROM a WHERE q_date = '2012-06-04 05:06:00';
будет использовать индекс для отталкивания даты/времени вместо того, чтобы выполнять полное сканирование таблицы. Или, если они находятся в двух отдельных строках:
SELECT * FROM a WHERE q_date = '2012-06-04' AND q_time = '05:06:00';
Ключ должен убедиться, что даты и время находятся в согласованном формате, входящем в базу данных. Для удобной презентации сделайте все конверсии на стороне клиента, а не в базе данных. (Например, convert '2012-06-04 05:06:00' to "1:06 am Eastern 6/4/2012".)
Если это не отвечает на вопрос, не могли бы вы разместить точный формат, который вы используете для хранения ваших дат и времени, и две примерные даты, которые вы пытаетесь сравнить, которые не работают так, как вы ожидаете их к?