사용할 수 있는 자료형은 5가지 

NULL: 널값

INTEGER: 1,2,3,4,6,8bytes의 정수값
(자동증가 시킬 경우 INTEGER PRIMARY KEY AUTOINCREMENT 로 표기)

REAL: 8bytes의 부동소수점값

TEXT: UTF-8, UTF-16BE, UTF-16LE인코딩의 문자열

BLOB: 입력된 그대로 저장, 바이너리 파일 등


다른 형태는 어떻게 만들면 될까? 

Boolean타입: INTEGER로 만들어서 0과 1로 구별.

Date, Time타입
      TEXT: YYYY-MM-DD HH:MM:SS.SSS 형태로 저장
      REAL: 율리우스력을 기준으로 하는 정보를 저장
      INTEGER: UTC타입으로 저장

SQLite에 숫자, 문자, 바이너리를 넣을 수 있으니 자유롭게 넣고 개발자가 알아서 정해서 사용하면 된다.

SQLite는 대용량의 데이터를 처리하기에는 적합하지 않기에 대형프로그램보다는 지금 가장 많이 사용되고 있는 안드로이드 어플 개발 등 작은 프로그램 개발에 사용된다. 즉 다수의 개발자가 아닌 소수 혹은 혼자서 개발하는 경우가 많을 것이기에 좀 더 가볍고 자유롭게 사용할 수 있게 하는 편이 더 낫다.

반응형
SQLite에서 날짜를 표시하기 위한 함수는 아래의 5가지가 있다.

date(timestring, modifier, modifier, ...) : 날짜
time(timestring, modifier, modifier, ...) : 시간
datetime(timestring, modifier, modifier, ...) : 날짜+시간
julianday(timestring, modifier, modifier, ...) : 율리우스력 날짜
strftime(format, timestring, modifier, modifier, ...) : 포맷 지정

흔히 현재 날짜를 얻을 때 date, time, datetime을 자주 사용하게 된다.
이 함수에 'now' 문자열을 넣으면 현재 날짜와 시간을 얻을 수 있고, 이는 xCurrentTime 메소드가 제공해 주는 것이라고 SQLite 공식 페이지가 말하고 있다.(-_-;;)

즉, SELECT date('now'); 를 하면 현재 날짜가 '2011-12-25' 일 형식 으로 나오고,
SELECT datetime('now'); 를 하면 현재 날짜+시간(시:분:초)이 '2011-12-25 23:30:11' 형식으로 나온다.
단, 국제표준시간(UTC) 기준의 값을 출력한다.

우리나라의 표준 시간은 국제표준시+9 이기 때문에 시간이 틀리게 출력 된다.

해결 방법은 대략 두가지.

1. localtime 값을 이용한 현재시간 구하기 

SELECT datetime('now','localtime');


위와 같이 하면 국제표준시+9 가 된 우리나라 시간이 된다.

2. 시간 값 더하기 

SELECT datetime('now','+9 hours');


국제 표준시에 +9를 해 주면 우리나라 시간이 된다.


편한게 좋기 때문에 1번 추천.

더 자세한 정보는 SQLite 공식 페이지의 Date And Time Functions 페이지를 참조 하자.

보고픈님이 정리하신 SQLitet 날짜 관련 샘플

--UTC 기준의 현재 날짜/시간
select datetime('now');
2010-08-25 04:01:46

-- 로컬 기준의 현재 날짜/시간
select datetime('now','localtime');
2010-08-25 13:02:30

--현재 로컬 기준 시간에서 10분 3.5초를 더한 시간.
select datetime('now','localtime','+3.5 seconds','+10 minutes');
2010-08-25 13:14:15

--현재 로컬 시간에 3.5초를 더하고 날짜는 돌아오는 화요일 (weekday == 0 이 일요일입니다.)
select datetime('now','localtime','+3.5 seconds','weekday 2');
2010-08-31 13:05:39

--현재 달의 마지막 날짜
SELECT date('now','start of month','+1 month','-1 day','localtime');
2010-08-31

--2004-01-01 02:34:56초부터 현재까지의 총 초
SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
209785028

--현재날짜/시간 기준에서 올해 9번째달의 첫번째 화요일
SELECT date('now','start of year','+9 months','weekday 2');
2010-10-05

-- 날짜 포맷 스타일 변경
select strftime("%Y/%m/%d %H:%M:%S",'now','localtime');
2010/08/27 09:17:22


반응형

+ Recent posts