Blog/content/posts/2023/sql/sqlite-datetime-now.md

2.8 KiB
Raw Blame History

title date draft tags
⏱ DATETIME 'now' по локальному времени в SQLite 2023-01-23T22:50:05+03:00 false
sql
tips

DATETIME в SQLite

В базах данных часто используется дефолтные значения, которые подставляются автоматически, если в операции INSERT значение не указано.

Например у тебя есть таблица, в которой поле join_date имеет тип данных DATETIME, значение по умолчанию которого DATETIME('now').

CREATE TABLE IF NOT EXISTS users(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_name TEXT NOT NULL,
    join_date DATETIME NOT NULL DEFAULT ( DATETIME('now' ) )
);

В случает добавления записи в таблицу в поле join_date автоматически будет подставлено текущее время.

В документации SQLite написано, что функция datetime() возращает значение в виде текста в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС.

The datetime() function returns the date and time as text in their same formats: YYYY-MM-DD HH:MM:SS.

Значения даты и времени могут быть сохранены в трех форматах:

  • текст в подмножестве формата ISO-8601
  • числа представляющие Юлианский день
  • числа представляющие количество секунд с момента (или до) 1970-01-01 00:00:00 UTC (временная метка unix).

Время во всех форматах представляется в UTC.

Модификаторы

Функция datetime() имеет следующий синтаксис.

datetime(value, modifier)

В данном случает в качетсве значения (value) используется now.
Список всех значений можно посмотреть на сайте SQLite: https://www.sqlite.org/lang_datefunc.html#time_values.

Для того, чтобы функция вставляла в запись значение даты, которое соответсвует локальному времени, необходим модификатор localtime.

CREATE TABLE IF NOT EXISTS users(
    join_date DATETIME NOT NULL DEFAULT ( DATETIME('now', 'localtime') )
);

Список всех модификаторах доступен по этой ссылке: https://www.sqlite.org/lang_datefunc.html#modifiers.