IT

SQLite에서 자동 타임 스탬프를 얻는 방법은 무엇입니까?

lottoking 2020. 7. 14. 07:56
반응형

SQLite에서 자동 타임 스탬프를 얻는 방법은 무엇입니까?


SQLite 데이터베이스 버전 3이 C #을 사용하여 데이터베이스를 사용하는 응용 프로그램을 만들 수 있습니다.

동시성에 대해 테이블에 타임 스탬프 필드를 사용하고 싶지만 새 레코드를 삽입 할 때이 필드가 설정되지 않고 null 인 것을 알 수 있습니다.

예를 들어, MS SQL Server에서 타임 스탬프 필드를 사용하면 데이터베이스에 업데이트 할 직접 설정하지 않습니다. SQLite에서 가능합니까?


필드의 선언을하십시오.

CREATE TABLE MyTable(
    ID INTEGER PRIMARY KEY,
    Name TEXT,
    Other STUFF,
    Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

그러나 INSERT명령 에서이 필드를 명시 적으로 설정하면이 필드가 NULL설정 NULL됩니다.


SQLite의 테이블에 TIMESTAMP 필드를 사용할 수 있습니다. 다음을 참조하십시오.

CREATE TABLE my_table (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    name VARCHAR(64),
    sqltime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL
);

INSERT INTO my_table(name, sqltime) VALUES('test1', '2010-05-28T15:36:56.200');
INSERT INTO my_table(name, sqltime) VALUES('test2', '2010-08-28T13:40:02.200');
INSERT INTO my_table(name) VALUES('test3');

결과는 다음과 가변적입니다.

SELECT * FROM my_table;

여기에 이미지 설명을 입력하십시오


자동 datetime 완료의 실제 예제 인 datefunc를 확장면 다음과 있습니다.

sqlite> CREATE TABLE 'test' ( 
   ...>    'id' INTEGER PRIMARY KEY,
   ...>    'dt1' DATETIME NOT NULL DEFAULT (datetime(CURRENT_TIMESTAMP, 'localtime')), 
   ...>    'dt2' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime')), 
   ...>    'dt3' DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%d %H:%M:%f', 'now', 'localtime'))
   ...> );

자동 datetime 완성을 시작하는 방식으로 일부 행을 삽입 해 보겠습니다.

sqlite> INSERT INTO 'test' ('id') VALUES (null);
sqlite> INSERT INTO 'test' ('id') VALUES (null);

데이터는 처음 두 개가 동일하지만 세 번째 기능이 아님을 분명히 보여줍니다.

sqlite> SELECT * FROM 'test';
1|2017-09-26 09:10:08|2017-09-26 09:10:08|2017-09-26 09:10:08.053
2|2017-09-26 09:10:56|2017-09-26 09:10:56|2017-09-26 09:10:56.894

SQLite 함수는 괄호로 묶여 있습니다. 한 가지 예에서 상상 얼마나 어려웠습니까?

즐기세요!


트리거를 사용할 수 있습니다. 아주 잘 작동합니다

CREATE TABLE MyTable(
ID INTEGER PRIMARY KEY,
Name TEXT,
Other STUFF,
Timestamp DATETIME);


CREATE TRIGGER insert_Timestamp_Trigger
AFTER INSERT ON MyTable
BEGIN
   UPDATE MyTable SET Timestamp =STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id;
END;

CREATE TRIGGER update_Timestamp_Trigger
AFTER UPDATE On MyTable
BEGIN
   UPDATE MyTable SET Timestamp = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW') WHERE id = NEW.id;
END;

위의 답변을 보완 청구 ...

EF를 사용하는 경우 데이터 주석 [Timestamp]로 속성을 장식 한 다음 모델 내에서 재정의 OnModelCreating으로 이동하여 다음 Fluent API 코드를 추가합니다.

modelBuilder.Entity<YourEntity>()
                .Property(b => b.Timestamp)
                .ValueGeneratedOnAddOrUpdate()
                .IsConcurrencyToken()
                .ForSqliteHasDefaultValueSql("CURRENT_TIMESTAMP");

이 테이블에 삽입 될 모든 데이터에 추가됩니다.


당신은 사용하여 사용자 정의 datetime을 사용할 수 있습니다 ...

 create table noteTable3 
 (created_at DATETIME DEFAULT (STRFTIME('%d-%m-%Y   %H:%M', 'NOW','localtime')),
 title text not null, myNotes text not null);

'NOW', '현지 시간'을 사용하여 현재 날짜를 가져 오십시오. 명명 된 db에 시간을 삽입 한 후 데이터베이스에 과거 또는 다른 시간이 표시됩니다.

감사합니다 ...

참고 URL : https://stackoverflow.com/questions/14461851/how-to-have-an-automatic-timestamp-in-sqlite

반응형