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".)
Если это не ответит на вопрос, не могли бы вы разместить точный формат что вы используете для хранения ваших дат и времени и двух примерных дат, которые вы пытаетесь сравнить, которые не работают так, как вы их ожидаете?
вы должны выложили свой «не-рабочий» код –
я не вижу смысла, как я 100% положительное сравнение даты/времени является проблемой. Но если это имеет большое значение, я с радостью обяжусь. Извини за это. – Andy
Под «сравнить две даты» вы имеете в виду «сравнить два раза в день», не так ли? –