2010-04-10 5 views
40

Gibt es eine Möglichkeit, eine Tabelle in sqlite3 zu erstellen, die eine Datetime-Spalte hat, die standardmäßig auf 'now' gesetzt ist?Kann ich eine Datetime-Spalte mit dem Standardwert in sqlite3 erstellen?

Die folgende Anweisung gibt einen Syntaxfehler:

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

aktualisieren: Hier ist die richtige DDL mit freundlicher Genehmigung von Sky Sanders:

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

@NobodyMan verwenden - vielleicht könnten Sie Ihre Frage ein und schließen die DDL aktualisieren, die leicht zu finden andere funktionieren. –

+0

@Sky - Ich bin nicht dagegen, aber macht das Ihre Antwort nicht überflüssig? Außerdem, wenn ich das bearbeite, sollte ich das falsche Snippet ersetzen oder einfach an die Frage mit der richtigen Antwort anhängen? Ich bin ein bisschen unwissend über SO Etikette :-) – NobodyMan

+1

Es verringert nicht wirklich eine Antwort, wenn Sie ein Update zu Ihrer Frage mit einem Beispiel hinzufügen, was letztlich für Sie arbeitete. Viele Antworten können hilfreiche Vorschläge sein, wie meine mit dem ddl-Fragment und Hintergrund, die Ihnen geholfen haben, Ihr ddl zu reparieren. Das Bestätigen der Lösung durch Hinzufügen der richtigen Anweisung ist ein Wert add. Ändern Sie unter keinen Umständen den ursprünglichen Code, so dass jemand mit dem gleichen Problem diese Lösung findet. Wie auch immer, ist ein strittiger Punkt, ich habe meine Antwort bearbeitet, um eine funktionierende Version Ihres ddl zu präsentieren. Prost –

Antwort

67

Try this:

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

Hintergrund:

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".

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

+6

Beachten Sie, dass 'current_timestamp' auf die Sekunde genau ist, wenn Sie Millisekunden verwenden wollen' default (STRFTIME ('% Y-% m-% d% H:% M:% f', 'NOW')) '. – TWiStErRob

11
... default (datetime(current_timestamp)) 

Der Ausdruck default folgende muss in Klammern sein. Dieses Formular ist nützlich, wenn Sie eine Datumsarithmetik mit SQLite date and time functions or modifiers durchführen möchten.

+0

Doug, Parenth sind nur erforderlich, wenn ein Ausdruck beteiligt ist. Die 'current_xxxx' sind Schlüsselwörter und fungieren als Literalwert. http://www.sqlite.org/syntaxdiagrams.html#column-constraint –

+0

Sky, ja, ist das nicht, was ich gesagt habe? Mein Punkt ist, dass wenn Sie mehr als das, was die Schlüsselwörter bieten, möchten, können Sie Ausdrücke verwenden, aber der Ausdruck muss in Klammern sein; Der create-Anweisung in der ursprünglichen Frage fehlten die Klammern. –

+1

Es gibt keinen Grund, datetime (current_timestamp) zu schreiben. Verwenden Sie einfach current_timestamp. – dan04

6

CURRENT_TIMESTAMP ist ein Literal-Wert genau wie 'mystring'

column-constraint:

enter image description here

literal-Wert:

enter image description here

+0

Ja, und die 'datetime ('now')' das verwendete OP ist ein 'expr', also braucht es die Klammern. – TWiStErRob

-1

können Sie die folgende Abfrage für die Verwendung von aktuellem Datum Wert in der Tabelle

create table tablename (date_field_name Created_on default CURRENT_DATE); 
Verwandte Themen