2010-04-10 13 views
40

Czy istnieje sposób utworzenia tabeli w sqlite3 z kolumną datetime, która domyślnie przyjmuje wartość "teraz"?Czy mogę utworzyć kolumnę datetime z wartością domyślną w sqlite3?

Poniższa instrukcja zwraca błąd składni:

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

Aktualizacja: Oto poprawna ddl uprzejmości Sky Sanders:

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

@NobodyMan - być może zaktualizować swoje pytanie i obejmują DDL, który pracuje dla innych, aby łatwo znaleźć. –

+0

@Sky - Nie jestem przeciwny, ale czy to nie znaczy, że twoja odpowiedź jest zbędna? Ponadto, jeśli dokonam edycji, czy powinienem zastąpić nieprawidłowy fragment lub po prostu dołączyć do pytania poprawną odpowiedzią? Jestem trochę nieświadomy etykiety SO :-) – NobodyMan

+1

To naprawdę nie zmniejsza odpowiedzi, gdy DODAJ aktualizację twojego pytania z przykładem tego, co ostatecznie zadziałało dla ciebie. Wiele odpowiedzi może być pomocnymi sugestiami, tak jak moje było z fragmentem ddl i tłem, co pomogło ci naprawić ddl. Potwierdzenie rozwiązania przez dodanie poprawnej instrukcji to wartość dodana. Pod żadnym pozorem nie zmieniaj oryginalnego kodu, tak to ktoś z tym samym problemem znajdzie to rozwiązanie. W każdym razie, jest kwestią dyskusyjną, zredagowałem swoją odpowiedź, by przedstawić działającą wersję twojego ddl. Pozdrawiam –

Odpowiedz

67

Spróbuj tego:

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

Tło:

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

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

+6

Zauważ, że 'current_timestamp' jest precyzyjny do drugiego, jeśli chcesz użyć milisekund, użyj' default (STRFTIME ('% Y-% m-% d% H:% M:% f', 'NOW')) '. – TWiStErRob

11
... default (datetime(current_timestamp)) 

Wyrażenie po default musi być w nawiasach. Ta forma jest przydatna, jeśli chcesz wykonać arytmetykę dat, używając SQLite date and time functions or modifiers.

+0

Doug, parenth są wymagane tylko w przypadku użycia wyrażenia. "Current_xxxx" są słowami kluczowymi i działają jako wartość literalna. http://www.sqlite.org/syntaxdiagrams.html#column-constraint –

+0

Niebo, tak, czy to nie to, co powiedziałem? Chodzi mi o to, że jeśli chcesz więcej niż słowa kluczowe, możesz użyć wyrażeń, ale wyrażenie musi być w nawiasach; w instrukcji tworzenia w pierwotnym pytaniu brakowało nawiasów. –

+1

Nie ma powodu, aby zapisywać datetime (current_timestamp). Po prostu użyj current_timestamp. – dan04

6

CURRENT_TIMESTAMP jest dosłownym, tak jak wartość 'mystring'

kolumny ograniczenia:

enter image description here

dosłownym wartości:

enter image description here

+0

Tak, a 'datetime ('teraz')' używany OP to 'wyrażenie ', więc potrzebuje nawiasów. – TWiStErRob

-1

można użyć następującego zapytania za korzystanie aktualną wartość daty w tabeli

create table tablename (date_field_name Created_on default CURRENT_DATE); 
Powiązane problemy