복붙노트

[SQL] SQLite는 데이터베이스 기본 시간 값 '지금'

SQL

SQLite는 데이터베이스 기본 시간 값 '지금'

이 타임 스탬프 열이있는 테이블을 만들 SQLite는 데이터베이스에서 가능하다 ( '지금') DATETIME에 기본?

이 같이 :

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

이 오류 ... 어떻게 해결할 수 있습니다?

해결법

  1. ==============================

    1.난 당신이 사용할 수 있다고 생각합니다

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

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

    버전 3.1 (소스) 등의

  2. ==============================

    2.DR 방법. 최근 목록 게시물에 HIPP :

    DR 방법. 최근 목록 게시물에 HIPP :

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

    3.() '지금'DATETIME () : 그것은 단지 구문 오류, 당신은 괄호가 필요합니다

    () '지금'DATETIME () : 그것은 단지 구문 오류, 당신은 괄호가 필요합니다

    이 문서를 보면, 당신은 구문의 'EXPR'옵션 주위에 추가 괄호를 알게 될 것이다.

  4. ==============================

    4.이 질문에 다른 답변과 의견에 따라 전체 예이다. 예에서, 타임 스탬프 (created_at 열)은 UNIX 에포크 UTC 시간대로 저장하며 필요한 경우에만 로컬 시간대로 변환된다.

    이 질문에 다른 답변과 의견에 따라 전체 예이다. 예에서, 타임 스탬프 (created_at 열)은 UNIX 에포크 UTC 시간대로 저장하며 필요한 경우에만 로컬 시간대로 변환된다.

    유닉스 시대를 사용하여 저장 공간을 절약 할 수 - 4 바이트 정수 대 ISO8601 문자열로, 데이터 유형을 참조 저장 될 때 (24)는 문자열을 바이트. 4 바이트가 충분하지 않으면 6 또는 8 바이트로 증가 할 수있다.

    UTC 시간대에 타임 스탬프를 저장하면 편리 여러 시간대에 적당한 값을 표시 할 수 있습니다.

    SQLite는 버전 3.8.6입니다 우분투 LTS 14.04로 제공됩니다.

    $ 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에 위치하고있어로의 현지 올바른 것입니다.

  5. ==============================

    5.저장 공간을 절약하기 위해, REAL 유형을 사용하는 것이 더있을 수 있습니다.

    저장 공간을 절약하기 위해, REAL 유형을 사용하는 것이 더있을 수 있습니다.

    데이터 유형에 SQLite는 1.2 섹션 버전 3 인용

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

    열 제약 조건을 참조하십시오.

    그리고 어떤 가치를 제공하지 않고 행을 삽입합니다.

    INSERT INTO "test" DEFAULT VALUES;
    
  6. ==============================

    6.당신이 쓰기 괄호하지 않았다 때문에 구문 오류입니다

    당신이 쓰기 괄호하지 않았다 때문에 구문 오류입니다

    당신이 작성하는 경우

    (날짜 ( '지금', '의 현지'))

  7. ==============================

    7.정수는 20 바이트를 저장하는대로이 다른 예는 현지 시간을 저장합니다. 작업은 필드 기본, 업데이트 트리거, 그리고보기에서 이루어집니다. 의 strftime는 '% S'(작은 따옴표)를 사용해야하기 때문에 "% S"나에 '일정하지'오류 줬어요 (큰 따옴표).

    정수는 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
    
  8. from https://stackoverflow.com/questions/200309/sqlite-database-default-time-value-now by cc-by-sa and MIT license