이 타임 스탬프 열이있는 테이블을 craete하는 SQLite는 데이터베이스에서 가능하다 DATETIME('now')
에 기본? 이처럼SQLite는 데이터베이스 기본 시간 값 '지금'
:
이 오류를 제공CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
... 어떻게 해결하려면?
이 타임 스탬프 열이있는 테이블을 craete하는 SQLite는 데이터베이스에서 가능하다 DATETIME('now')
에 기본? 이처럼SQLite는 데이터베이스 기본 시간 값 '지금'
:
이 오류를 제공CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
... 어떻게 해결하려면?
난 당신이 버전 3.1 박사에 따라 (source)
의로
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP
DEFAULT CURRENT_TIMESTAMP
);
를 사용할 수 있다고 생각합니다. 최근 목록 게시물에 HIPP :
CREATE TABLE whatever(
....
timestamp DATE DEFAULT (datetime('now','localtime')),
...
);
그것은, 당신은 괄호가 필요 단지 구문 오류 : 당신이 documentation 보면 (DATETIME('now'))
, 당신이 'expr에'주위에 추가 괄호를 알게 될 것이다을 옵션을 사용하십시오. 당신이
Select datetime('now') then it will give you utc time but if you this write it query then you must add parenthesis before this so (datetime('now')) for UTC Time. for local time same Select datetime('now','localtime') for query
작성하는 경우는 괄호에게
를 작성하지 않았기 때문에
그것은 구문 오류입니다 (날짜를 ('지금', '의 현지'))
사용하는 것이 더 좋을 수 있습니다 REAL 유형으로 저장 공간을 절약합니다.
견적
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t REAL DEFAULT (datetime('now', 'localtime'))
);
Datatypes In SQLite Version 3 섹션 1.2를 참조 column-constraint.SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values
그리고 insert 어떤 가치를 제공하지 않고 행.
INSERT INTO "test" DEFAULT VALUES;
나는'n'에 적합한 값을 선택할 수있는'integer (n)'을 선호합니다. – user272735
이것은 다른 답변과 질문에 대한 전체적인 예입니다. 이 예에서 시간 소인 (created_at
-column)은 unix epoch UTC 시간대로 저장되고 필요한 경우에만 현지 시간대로 변환됩니다. 24 바이트 문자열 대 4 바이트 정수 ISO8601 문자열로 저장 될 때, datatypes를 참조 - 유닉스 시대를 사용
저장 공간을 절약 할 수 있습니다. 4 바이트가 충분하지 않으면 6 또는 8 바이트로 증가시킬 수 있습니다. UTC 시간대에
저장 타임 스탬프는 편리 여러 시간대에 적당한 값을 표시 할 수 있습니다.
SQLite는 버전은 우분투 LTS 14.04와 3.8.6이 선박이다.
$ sqlite3 so.db
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> .headers on
create table if not exists example (
id integer primary key autoincrement
,data text not null unique
,created_at integer(4) not null default (strftime('%s','now'))
);
insert into example(data) values
('foo')
,('bar')
;
select
id
,data
,created_at as epoch
,datetime(created_at, 'unixepoch') as utc
,datetime(created_at, 'unixepoch', 'localtime') as localtime
from example
order by id
;
id|data|epoch |utc |localtime
1 |foo |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
2 |bar |1412097842|2014-09-30 17:24:02|2014-09-30 20:24:02
현지 시간은 내가 쿼리하는 순간 UTC + 2 DST에 위치하므로 정확합니다. 당신이 저장 크기 염려되는 경우
는,이 요리법은 날짜마다 데이터베이스에 약 24 바이트를 차지, ISO-8601 (텍스트 형식)에 타임 스탬프를 절약 할 수 있습니다.INTEGER (4) 열을 사용하고 INSERT INTO test (t) 값 (strftime ("% s", CURRENT_TIME))을 통해 유닉스 시간을 저장하여 공간을 절약 할 수 있습니다. – mckoss
@mckoss 귀하의 의견에 감사드립니다. 작성 진술은 다음과 같습니다 : ... mycolumn default (strftime ('% s', 'now')) – larham1
"... 기본값 (strftime ('% s', 'now')) "상수 표현식이 아니며 기본적으로"Error : column [...]의 기본값이 상수가 아닙니다. "라는 경고를 표시합니다. –