¿Es posible en una base de datos sqlite crear una tabla que tenga una columna de marca de tiempo predeterminada 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?
de acuerdo con el dr. hipp en una publicación reciente de la lista:
fuente
CURRENT_TIMESTAMP
así que creé mi propia función en C para devolver la cantidad de microsegundos desde la época, y me alegro de poder usar esoDEFAULT
ahora.Es solo un error de sintaxis, necesita paréntesis:
(DATETIME('now'))
Si observa la documentación , notará el paréntesis que se agrega alrededor de la opción 'expr' en la sintaxis.
fuente
Este es un ejemplo completo basado en las otras respuestas y comentarios a la pregunta. En el ejemplo, la marca de tiempo (
created_at
-columna) se guarda como unix epoch zona horaria UTC de y se convierte a la zona horaria local solo cuando es necesario.El uso de unix epoch ahorra espacio de almacenamiento: entero de 4 bytes frente a una cadena de 24 bytes cuando se almacena como una cadena ISO8601, consulte los tipos de datos . Si 4 bytes no es suficiente, 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 incluye con Ubuntu LTS 14.04.
Hora local es correcta ya que estoy ubicado en UTC + 2 DST en el momento de la consulta.
fuente
Puede ser mejor usar el tipo REAL para ahorrar espacio de almacenamiento.
Cita de la sección 1.2 de Datatypes en SQLite Versión 3
ver restricción de columna .
E inserte una fila sin proporcionar ningún valor.
fuente
integer(n)
donde uno puede elegir el valor adecuado paran
.Es un error de sintaxis porque no escribiste paréntesis
Si tú escribes
(datetime ('ahora', 'localtime'))
fuente
Este ejemplo alternativo almacena la hora local como Integer para guardar los 20 bytes. El trabajo se realiza en el campo predeterminado, Update-trigger y View. strftime debe usar '% s' (comillas simples) porque "% s" (comillas dobles) arrojó un error 'No constante' sobre mí.
fuente