--- title: "⏱ DATETIME 'now' по локальному времени в SQLite" date: 2023-01-23T22:50:05+03:00 draft: false tags: [sql, tips] --- ## DATETIME в SQLite В базах данных часто используется дефолтные значения, которые подставляются автоматически, если в операции `INSERT` значение не указано. Например у тебя есть таблица, в которой поле `join_date` имеет тип данных `DATETIME`, значение по умолчанию которого `DATETIME('now')`. ```sql 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()` имеет следующий синтаксис. ```c++ datetime(value, modifier) ``` В данном случает в качетсве значения (`value`) используется `now`. Список всех значений можно посмотреть на сайте SQLite: [https://www.sqlite.org/lang_datefunc.html#time_values](https://www.sqlite.org/lang_datefunc.html#time_values). Для того, чтобы функция вставляла в запись значение даты, которое соответсвует локальному времени, необходим модификатор `localtime`. ```sql CREATE TABLE IF NOT EXISTS users( join_date DATETIME NOT NULL DEFAULT ( DATETIME('now', 'localtime') ) ); ``` Список всех модификаторах доступен по этой ссылке: [https://www.sqlite.org/lang_datefunc.html#modifiers](https://www.sqlite.org/lang_datefunc.html#modifiers).