Как создать столбец datetime со значением по умолчанию в sqlite3?

40

Есть ли способ создать таблицу в sqlite3, которая имеет столбец datetime, который по умолчанию имеет значение "сейчас"?

Следующий оператор возвращает синтаксическую ошибку:

create table tbl1(id int primary key, dt datetime default datetime('now'));

Обновить. Здесь правильная ddl любезность Sky Sanders:

create table tbl1(id int primary key, dt datetime default current_timestamp);
  • 0
    @NobodyMan - возможно, вы могли бы обновить свой вопрос и включить ddl, который работает для других, чтобы легко найти.
  • 0
    @Sky - я не против, но разве это не делает ваш ответ излишним? Кроме того, если я внесу изменения, я должен заменить неправильный фрагмент или просто добавить к вопросу правильный ответ? Я немного не в курсе ТАКОГО этикета :-)
Показать ещё 1 комментарий
Теги:
sqlite3

4 ответа

64
Лучший ответ

Попробуйте следующее:

create table tbl1(id int primary key, dt datetime default current_timestamp);

Фон:

Ограничение DEFAULT указывает значение по умолчанию, которое следует использовать при выполнении ВСТАВИТЬ. Значение может быть NULL, a строковая константа, число или постоянное выражение, заключенное в круглые скобки. Значение по умолчанию может также является одним из специальных независимые от случая ключевые слова CURRENT_TIME, CURRENT_DATE или CURRENT_TIMESTAMP. Если значение равно NULL, строковая константа или номер, это вставляется в столбец всякий раз выражение INSERT, которое не указать значение для столбца казнены. Если значение равно CURRENT_TIME, CURRENT_DATE или CURRENT_TIMESTAMP, затем текущий Дата и/или время UTC вставляются в столбцы. Для CURRENT_TIME формат HH: MM: SS. Для CURRENT_DATE, YYYY-MM-DD. Формат для CURRENT_TIMESTAMP - "ГГГГ-ММ-ДД HH: MM: SS".

От http://www.sqlite.org/lang_createtable.html

  • 6
    Обратите внимание, что current_timestamp точностью до секунды, если вы хотите, чтобы по default (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) использовались миллисекунды default (STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')) .
11
... default (datetime(current_timestamp))

В скобках должно быть указано выражение default. Эта форма полезна, если вы хотите выполнить арифметику даты, используя функции и модификаторы даты и времени SQLite.

  • 0
    Даг, круглые скобки требуются только в том случае, если задействовано выражение. «Current_xxxx» являются ключевыми словами и действуют как буквальное значение. sqlite.org/syntaxdiagrams.html#column-constraint
  • 0
    Скай, да, разве это не то, что я сказал? Я хочу сказать, что если вы хотите получить больше, чем то, что предоставляют ключевые слова, вы можете использовать выражения, но выражение должно быть в скобках; В предложении create в исходном вопросе не было скобок.
Показать ещё 3 комментария
6

CURRENT_TIMESTAMP - это буквальное значение, подобное 'mystring'

колонного ограничение:

Изображение 1146

буквальным-значение:

Изображение 1147

  • 0
    Да, а datetime('now') используемый OP - это expr , поэтому ему нужны скобки.
-2

вы можете использовать следующий запрос для использования текущего значения даты в таблице

create table tablename (date_field_name Created_on default CURRENT_DATE);
  • 0
    не по теме, оригинальный вопрос о поле даты и времени, а не о поле даты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню