valor de time pnetworkingeterminado de la database sqlite 'ahora'

¿Es posible en una database sqlite crear una tabla que tenga una columna de timestamp pnetworkingeterminada en DATETIME('now') ?

Me gusta esto:

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t TIMESTAMP DEFAULT DATETIME('now') ); 

Esto da un error … ¿Cómo resolverlo?

creo que puedes usar

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); 

a partir de la versión 3.1 ( fuente )

de acuerdo con el dr. hipp en una publicación reciente de la list:

 CREATE TABLE whatever( .... timestamp DATE DEFAULT (datetime('now','localtime')), ... ); 

Es solo un error de syntax, necesita paréntesis: (DATETIME('now'))

Si mira la documentation , verá el paréntesis que se agrega alnetworkingedor de la opción 'expr' en la syntax.

Este es un ejemplo completo basado en las otras respuestas y comentarios a la pregunta. En el ejemplo, la timestamp ( created_at ) se guarda como unix time UTC timezone y se convierte a la zona horaria local solo cuando es necesario.

El uso de unix epoch ahorra espacio de almacenamiento: serie de 4 bytes frente a cadena de 24 bytes cuando se almacena como cadena ISO8601, consulte los types de datos . Si 4 bytes no son suficientes, se puede boost a 6 u 8 bytes.

Guardar la timestamp en la zona horaria UTC hace que sea conveniente mostrar un valor razonable en varias zonas horarias.

La versión de SQLite es 3.8.6 que se envía con Ubuntu LTS 14.04.

 $ sqlite3 so.db SQLite version 3.8.6 2014-08-15 11:46:33 Enter ".help" for usage hints. sqlite> .headers on create table if not exists example ( id integer primary key autoincrement ,data text not null unique ,created_at integer(4) not null default (strftime('%s','now')) ); insert into example(data) values ('foo') ,('bar') ; select id ,data ,created_at as epoch ,datetime(created_at, 'unixepoch') as utc ,datetime(created_at, 'unixepoch', 'localtime') as localtime from example order by id ; id|data|epoch |utc |localtime 1 |foo |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02 2 |bar |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02 

Localtime es correcto ya que estoy ubicado en UTC + 2 DST en el momento de la consulta.

Es un error de syntax porque no escribiste paréntesis

Si tú escribes

Seleccione datetime ('now') luego le dará time utc pero si lo escribe, entonces debe agregar paréntesis antes de esto para que (datetime ('now')) para UTC Time. para la hora local mismo Seleccione datetime ('now', 'localtime') para consulta

(datetime ('now', 'localtime'))

Puede ser mejor usar el tipo REAL para ahorrar espacio de almacenamiento.

Cita de la sección 1.2 de los types de datos en SQLite versión 3

SQLite no tiene una class de almacenamiento reservada para almacenar dates y / o times. En cambio, las funciones de date y hora integradas de SQLite son capaces de almacenar dates y horas como valores de TEXTO, REALES o INTEGER

 CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t REAL DEFAULT (datetime('now', 'localtime')) ); 

ver columna-restricción .

E inserte una fila sin proporcionar ningún valor.

 INSERT INTO "test" DEFAULT VALUES;