programacion - valor de tiempo predeterminado de la base de datos sqlite ''ahora''
pasar datos de sqlite a sql server (6)
Es solo un error de sintaxis, necesita paréntesis: (DATETIME(''now''))
Si mira la documentation , verá el paréntesis que se agrega alrededor de la opción ''expr'' en la sintaxis.
¿Es posible en una base de datos sqlite crear una tabla que tenga una columna de marca de tiempo predeterminada 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?
Es un error de sintaxis porque no escribiste paréntesis
Si tú escribes
Seleccione datetime (''now'') luego le dará tiempo 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''))
Este es un ejemplo completo basado en las otras respuestas y comentarios a la pregunta. En el ejemplo, la marca de tiempo ( 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 datatypes . Si 4 bytes no son suficientes, se puede aumentar a 6 u 8 bytes.
Guardar la marca de tiempo 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.
Puede ser mejor usar el tipo REAL para ahorrar espacio de almacenamiento.
Cita de la sección 1.2 de los datatypes de datatypes
SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y / o tiempos. En cambio, las funciones de fecha y hora integradas de SQLite son capaces de almacenar fechas y horas como valores de TEXTO, REALES o INTEGER
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t REAL DEFAULT (datetime(''now'', ''localtime''))
);
ver documentation .
E insert una fila sin proporcionar ningún valor.
INSERT INTO "test" DEFAULT VALUES;
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 ( source )
de acuerdo con el dr. hipp en una publicación reciente de la lista:
CREATE TABLE whatever(
....
timestamp DATE DEFAULT (datetime(''now'',''localtime'')),
...
);