문제

sqlite 데이터베이스에서 기본값이있는 타임 스탬프 열이있는 테이블을 craete 할 수 있습니까? DATETIME('now') ?

이와 같이:

CREATE TABLE test (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    t TIMESTAMP DEFAULT DATETIME('now')
);

이것은 오류가 발생합니다 ... 해결 방법?

도움이 되었습니까?

해결책

나는 당신이 사용할 수 있다고 생각합니다

CREATE TABLE test (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  t TIMESTAMP
  DEFAULT CURRENT_TIMESTAMP
);

버전 3.1 기준 (원천)

다른 팁

DR에 따르면. 최근 목록 게시물의 HIPP :

CREATE TABLE whatever(
     ....
     timestamp DATE DEFAULT (datetime('now','localtime')),
     ...
);

구문 오류 일뿐입니다. 괄호가 필요합니다. (DATETIME('now'))

당신이 보면 선적 서류 비치, 구문의 'expr'옵션 주위에 추가되는 괄호에 주목할 것입니다.

이것은 질문에 대한 다른 답변과 의견을 기반으로 한 전체 예입니다. 예에서 타임 스탬프 (created_at-Column)은 저장됩니다 유닉스 에포크 UTC 타임 존과 필요한 경우에만 국부 시간대로 변환했습니다.

UNIX EPOCH 사용 저장 공간 저장 - 4 바이트 정수 대 24 바이트 스트링 ISO8601 문자열로 저장 될 때 참조하십시오. 데이터 유형. 4 바이트로 충분하지 않은 경우 6 또는 8 바이트로 증가 할 수 있습니다.

UTC Timezone에 타임 스탬프를 저장하면 여러 타임 존에서 합리적인 값을 표시하는 것이 편리합니다.

SQLITE 버전은 Ubuntu 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에 위치하므로 LocalTime이 정확합니다.

저장 공간을 절약하기 위해 실제 유형을 사용하는 것이 좋습니다.

1.2 섹션에서 인용합니다 SQLITE 버전 3의 데이터 유형

SQLITE에는 날짜 및/또는 시간을 저장하기위한 스토리지 클래스가 없습니다. 대신, SQLITE의 내장 날짜 및 시간 기능은 날짜와 시간을 텍스트, 실제 또는 정수 값으로 저장할 수 있습니다.

CREATE TABLE test (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    t REAL DEFAULT (datetime('now', 'localtime'))
);

보다 칼럼 제약 .

그리고 끼워 넣다 값을 제공하지 않고 행입니다.

INSERT INTO "test" DEFAULT VALUES;

괄호를 작성하지 않았기 때문에 구문 오류입니다.

당신이 쓰면

DateTime ( 'now')을 선택하면 UTC 시간을 줄 것이지만 쿼리를 작성하면 UTC 시간에 대해서 (dateTime ( 'now')) 전에 괄호를 추가해야합니다. 로컬 타임의 경우 쿼리에 대해 동일한 datetime ( 'now', 'localtime')을 선택하십시오.

(DateTime ( 'now', 'localtime'))))

이 대체 예는 현지 시간을 20 바이트를 저장하기위한 정수로 저장합니다. 작업은 필드 기본값, 업데이트 트리거 및보기에서 수행됩니다. Strftime은 "%s"(이중 점수)가 나에게 '상수가 아닌'오류를 던 졌기 때문에 '%s'(단일 품종)를 사용해야합니다.

Create Table Demo (
   idDemo    Integer    Not Null Primary Key AutoIncrement
  ,DemoValue Text       Not Null Unique
  ,DatTimIns Integer(4) Not Null Default (strftime('%s', DateTime('Now', 'localtime'))) -- get Now/UTC, convert to local, convert to string/Unix Time, store as Integer(4)
  ,DatTimUpd Integer(4)     Null
);

Create Trigger trgDemoUpd After Update On Demo Begin
  Update Demo Set
    DatTimUpd  =                          strftime('%s', DateTime('Now', 'localtime'))  -- same as DatTimIns
  Where idDemo = new.idDemo;
End;

Create View If Not Exists vewDemo As Select -- convert Unix-Times to DateTimes so not every single query needs to do so
   idDemo
  ,DemoValue
  ,DateTime(DatTimIns, 'unixepoch') As DatTimIns -- convert Integer(4) (treating it as Unix-Time)
  ,DateTime(DatTimUpd, 'unixepoch') As DatTimUpd --   to YYYY-MM-DD HH:MM:SS
From Demo;

Insert Into Demo (DemoValue) Values ('One');                      -- activate the field Default
-- WAIT a few seconds --    
Insert Into Demo (DemoValue) Values ('Two');                      -- same thing but with
Insert Into Demo (DemoValue) Values ('Thr');                      --   later time values

Update Demo Set DemoValue = DemoValue || ' Upd' Where idDemo = 1; -- activate the Update-trigger

Select * From    Demo;                                            -- display raw audit values
idDemo  DemoValue  DatTimIns   DatTimUpd
------  ---------  ----------  ----------
1       One Upd    1560024902  1560024944
2       Two        1560024944
3       Thr        1560024944

Select * From vewDemo;                                            -- display automatic audit values
idDemo  DemoValue  DatTimIns            DatTimUpd
------  ---------  -------------------  -------------------
1       One Upd    2019-06-08 20:15:02  2019-06-08 20:15:44
2       Two        2019-06-08 20:15:44
3       Thr        2019-06-08 20:15:44
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top