2010-04-10 3 views
40

Existe-t-il un moyen de créer une table dans sqlite3 avec une colonne datetime par défaut 'now'?Puis-je créer une colonne datetime avec la valeur par défaut dans sqlite3?

L'instruction suivante renvoie une erreur de syntaxe:

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

Mise à jour: Voici la courtoisie ddl correcte de Sky Sanders:

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

@NobodyMan - vous pourriez peut-être mettre à jour votre question et inclure les ddl qui fonctionne pour les autres à trouver facilement. –

+0

@Sky - Je ne suis pas opposé, mais cela ne rend-il pas votre réponse redondante? En outre, si je modifie, dois-je remplacer l'extrait incorrect ou simplement ajouter à la question la bonne réponse? Je suis un peu ignorant de l'étiquette SO :-) – NobodyMan

+1

Il ne diminue pas vraiment une réponse lorsque vous AJOUTER une mise à jour à votre question avec un exemple de ce qui a finalement fonctionné pour vous. Beaucoup de réponses peuvent être des suggestions utiles, comme la mienne avec le fragment ddl et l'arrière-plan, ce qui vous a aidé à réparer votre ddl. Confirmer la solution en ajoutant l'instruction correcte est une valeur ajoutée. En aucun cas changer le code original, c'est ainsi que quelqu'un avec le même problème trouvera cette solution. De toute façon, c'est un point discutable, j'ai édité ma réponse pour présenter une version de travail de votre ddl. Bravo –

Répondre

67

Essayez ceci:

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

Contexte:

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

Notez que 'current_timestamp' est précis à la seconde, si vous voulez des millisecondes, utilisez' default (STRFTIME ('% Y-% m-% d% H:% M:% f', 'NOW')) '. – TWiStErRob

11
... default (datetime(current_timestamp)) 

L'expression suivante default doit être entre parenthèses. Ce formulaire est utile si vous souhaitez exécuter l'arithmétique des dates en utilisant SQLite date and time functions or modifiers.

+0

Doug, parenth sont seulement requis si une expression est impliquée. Les 'current_xxxx' sont des mots-clés et agissent en tant que valeur littérale. http://www.sqlite.org/syntaxdiagrams.html#column-constraint –

+0

Sky, oui, n'est-ce pas ce que j'ai dit? Mon point est que si vous voulez plus que ce que les mots-clés fournissent, vous pouvez utiliser des expressions, mais l'expression doit être entre parenthèses; l'instruction create dans la question d'origine manquait les parenthèses. –

+1

Il n'y a aucune raison d'écrire datetime (current_timestamp). Utilisez simplement current_timestamp. – dan04

6

CURRENT_TIMESTAMP est une valeur littérale tout comme 'mystring'

contrainte_colonne:

enter image description here

-valeur littérale:

enter image description here

+0

Oui, et le 'datetime ('now')' l'OP utilisé est un 'expr', donc il a besoin des parenthèses. – TWiStErRob

-1

vous pouvez utiliser la requête suivante pour utiliser la valeur de date actuelle dans votre table

create table tablename (date_field_name Created_on default CURRENT_DATE);