2012-02-23 2 views
1

나는 YYYY-MM-DD 형식의 날짜가 포함 된 sqlite 데이터베이스로 파일을 구문 분석하고 있습니다. 항목을 날짜별로 정렬 할 수있는 방식으로 sqlite에 항목을 저장하려고합니다. sqlite에 날짜를 저장하고 주문하는 데 필요한 일반 프로토콜은 무엇입니까? 날짜를 숫자로 변환해야합니다. YYYY-MM-DD 날짜를 타임 스탬프로 변환하는 방법이 있습니까?sqlite 날짜 정렬

+0

"문자열을 자르지 않는"의미는 무엇입니까? –

답변

2

SQLite는 테이블 생성시 "DATE"를 지원합니다. (나중에 자세히 설명합니다.)

CREATE TABLE test (dt DATE PRIMARY KEY); 
INSERT INTO "test" VALUES('2012-01-01'); 
INSERT INTO "test" VALUES('2012-01-02'); 
INSERT INTO "test" VALUES('2012-01-03'); 

SELECT dt FROM test ORDER BY dt; 
2012-01-01 
2012-01-02 
2012-01-03 

yyyy-mm-dd 형식의 값은 문자열 또는 날짜 형식으로 올바르게 정렬됩니다. 이것이 yyyy-mm-dd가 국제 표준이 된 한 가지 이유입니다.

그러나 SQLite는 대부분의 데이터베이스 작업자가 예상하는 방식으로 데이터 형식을 사용하지 않습니다. 데이터 저장은 대신 storage classes을 기반으로합니다. 예를 들어, SQLite는 이것을 허용합니다.

INSERT INTO test VALUES ('Oh, bugger.'); 
SELECT * FROM test ORDER BY dt; 
2012-01-01 
2012-01-02 
2012-01-03 
Oh, bugger. 

또한 하나의 열에 다른 날짜 형식 (실제로는 값)을 사용할 수 있습니다. 그것의 행동은 표준 SQL 엔진과는 완전히 다릅니다.

INSERT INTO test VALUES ('01/02/2012'); 
SELECT * FROM test ORDER BY dt; 
01/02/2012 
2012-01-01 
2012-01-02 
2012-01-03 
Oh, bugger. 

날짜 열에 타임 스탬프를 저장하는 데 특별한 작업을 수행 할 필요가 없습니다. (차라리 볼 수있을하지만 당신은 타임 스탬프로 자신을 열을 선언합니다.)

INSERT INTO test VALUES ('2012-01-01 11:00:00'); 
SELECT * FROM test ORDER BY dt; 
2012-01-01 
2012-01-01 11:00:00 
2012-01-02 
2012-01-03 
Oh, bugger. 

SQLite는만큼 당신이 그것으로 일관된 데이터를 먹이로 옳은 일을하려고합니다. 표준 형식을 사용하면 날짜를 올바르게 정렬합니다.

1

당신은 당신은 toYYYY-MM-DD 날짜 타임 스탬프는 다음

SELECT strftime('%s','YYYY-MM-DD'); 

를 사용하려면 다음

SELECT strftime('%s','now'); 

을 사용하여 현재 타임 스탬프하려면 어디에 1970-01-01

이후 % S = 초
2

"YYYY-MM-DD"형식으로 날짜를 저장하는 대신 해당 날짜의 타임 스탬프를 저장하면 테이블을 정렬하는 데 도움이됩니다.