Каковы sqlite-эквиваленты MySQL INTERVAL и UTC_TIMESTAMP?

Каковы sqlite-эквиваленты INTERVAL и UTC_TIMESTAMP? Например, представьте, что вы «переносите» следующий SQL из MySQL в sqlite:

SELECT mumble
  FROM blah
 WHERE blah.heart_beat_time > utc_timestamp() - INTERVAL 600 SECOND;

person Jacob Gabrielson    schedule 08.07.2009    source источник


Ответы (3)


datetime('now') предоставляет вам текущую дату и время в формате UTC, поэтому SQLite эквивалентен MySQL UTC_TIMESTAMP().

Также может быть полезно знать, что, учитывая строку даты и времени, datetime может преобразовать ее из местного времени в UTC, используя datetime('2011-09-25 18:18', 'utc').

Вы также можете использовать функцию datetime() для применения таких модификаторов, как «+1 день», «начало месяца», «- 10 лет» и многих других.

Поэтому ваш пример будет выглядеть в SQLite так:

SELECT mumble
  FROM blah
 WHERE blah.heart_beat_time > datetime('now', '-600 seconds');

Дополнительные модификаторы можно найти на странице функций даты и времени SQLite.

person Rikki    schedule 25.09.2011
comment
согласно этим документам, «сейчас» уже находится в «UTC», и добавление «UTC» фактически предполагает, что время указано по местному времени (поэтому добавляет/удаляет N часов), поэтому я думаю, что это должно быть datetime('now', '-600 seconds') - person Jacob Gabrielson; 26.09.2011
comment
@JacobGabrielson, ты совершенно прав. Было очень поздно, и мой мозг сгорел от попыток исправить ошибку, из-за которой все отключалось на час (может быть так много вещей, когда вы находитесь в Великобритании летом!) Исправлено! - person Rikki; 27.09.2011

В sqlite нет встроенной поддержки временных меток.

Я использовал простые старые (64-битные) целые числа в качестве временных меток, представляющих микро- или миллисекунды с начала эпохи.

Поэтому, предполагая миллисекунды:

SELECT mumble
  FROM blah
WHERE blah.heart_beat_time_millis > ? - 600*1000;

и привязать системное время в миллисекундах к первому параметру.

person laalto    schedule 09.07.2009

в SQLite есть LOCAL_TIMESTAMP, но это GMT.

person Community    schedule 05.09.2009