From c643d230bd956ced552bfb932bd435cfbdba729d Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Mon, 23 Jan 2023 23:10:54 +0300 Subject: [PATCH] localtime datenow sqlite --- content/posts/2023/sql/sqlite-datetime-now.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 content/posts/2023/sql/sqlite-datetime-now.md diff --git a/content/posts/2023/sql/sqlite-datetime-now.md b/content/posts/2023/sql/sqlite-datetime-now.md new file mode 100644 index 0000000..1acc9c6 --- /dev/null +++ b/content/posts/2023/sql/sqlite-datetime-now.md @@ -0,0 +1,63 @@ +--- +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).