2010-04-10 11 views
40

¿Hay alguna manera de crear una tabla en sqlite3 que tenga una columna de fecha y hora predeterminada para 'ahora'?¿Puedo crear una columna de fecha y hora con el valor predeterminado en sqlite3?

La siguiente instrucción devuelve un error de sintaxis:

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

actualización: Aquí está la cortesía ddl correcta de Sky Sanders:

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

@NobodyMan - tal vez usted podría actualizar su pregunta e incluir el DDL que trabaja para que otros puedan encontrar fácilmente. –

+0

@Sky - No me opongo, ¿pero eso no hace que tu respuesta sea redundante? Además, si edito ¿debería reemplazar el fragmento incorrecto o simplemente anexar la pregunta con la respuesta correcta? Soy un poco ignorante de la etiqueta SO :-) – NobodyMan

+1

Realmente no disminuye una respuesta cuando agregas una actualización a tu pregunta con un ejemplo de lo que finalmente funcionó para ti. Muchas respuestas pueden ser útiles, como las mías con el fragmento ddl y el fondo, que te ayudaron a arreglar tu ddl. Confirmar la solución agregando la declaración correcta es un valor agregado. Bajo ninguna circunstancia cambie el código original, así es como alguien con el mismo problema encontrará esta solución. De todos modos, es un punto discutible, edité mi respuesta para presentar una versión funcional de tu ddl. cheers –

Respuesta

67

Prueba esto:

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

Antecedentes:

The DEFAULT constraint specifies a default value to use when doing an INSERT. The value may be NULL, a string constant, a number, or a constant expression enclosed in parentheses. The default value may also be one of the special case-independant keywords CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP. If the value is NULL, a string constant or number, it is inserted into the column whenever an INSERT statement that does not specify a value for the column is executed. If the value is CURRENT_TIME, CURRENT_DATE or CURRENT_TIMESTAMP, then the current UTC date and/or time is inserted into the columns. For CURRENT_TIME, the format is HH:MM:SS. For CURRENT_DATE, YYYY-MM-DD. The format for CURRENT_TIMESTAMP is "YYYY-MM-DD HH:MM:SS".

De http://www.sqlite.org/lang_createtable.html

+6

Tenga en cuenta que 'current_timestamp' es exacto al segundo, si quiere milisegundos use' default (STRFTIME ('% Y-% m-% d% H:% M:% f', 'NOW')) '. – TWiStErRob

11
... default (datetime(current_timestamp)) 

La expresión siguiente default debe estar entre paréntesis. Este formulario es útil si desea realizar aritmética de fecha usando SQLite date and time functions or modifiers.

+0

Doug, parenth solo son necesarios si se trata de una expresión. Las 'current_xxxx' son palabras clave y actúan como valor literal. http://www.sqlite.org/syntaxdiagrams.html#column-constraint –

+0

Sky, sí, ¿no es eso lo que dije? Mi punto es que si quieres más de lo que proporcionan las palabras clave, puedes usar expresiones, pero la expresión debe estar entre paréntesis; al enunciado crear en la pregunta original le faltaban los paréntesis. –

+1

No hay ninguna razón para escribir datetime (current_timestamp). Solo usa current_timestamp. – dan04

6

CURRENT_TIMESTAMP es un literal-valor justo como 'mystring'

columna-restricción:

enter image description here

literal-valor:

enter image description here

+0

Sí, y 'datetime ('now')' el OP utilizado es un 'expr', por lo que necesita los paréntesis. – TWiStErRob

-1

puede utilizar la siguiente consulta para utilizar el valor fecha actual en la tabla de

create table tablename (date_field_name Created_on default CURRENT_DATE); 
Cuestiones relacionadas