database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 2185 게시물 읽기
No. 2185
Re: 시간 정보를 PostgreSQL 에 저장하고자 한다면... 2
작성자
김상기
작성일
2001-01-22 04:29
조회수
9,241

>>정재익 님께서 쓰시길<<

 

:: 시간 정보를 PostgreSQL 에 저장하는 방법은 여러가지 있습니다. 시간에 관한 자료형이 그만큼 Postgre

:: SQL 에서는 복잡하게 되어 있기 때문입니다.

::

:: 가장 많이 사용하는 형은 아마도 timestamp 형과 abstime 형이 아닐까 생각합니다. 하지만 개인적으로

:: 는 그냥 int 형을 많이 이용합니다. int 형에 어떻게 시간을 저장하냐고요. 그냥 unix time 함수에서

:: 돌아온 값 (1970.1.1 시작부터 현재까지 흐른 시간을 초단위로 표시) 을 정수 그대로 저장해 둡니다.

:: 이것을 나중에 postgresql 에서 필요할 경우 적당히 가공하여 사용하면 됩니다.

::

:: select now()::abstime::integer;

:: 이렇게 하면 현재의 unix time() 함수 값을 확인할 수 있습니다.

::

:: 그리고 만약 time 이라는 필드에 정수로 그 값이 저장되어 있다면 그 시간을 알아 보고자 한다면 다음

:: 과 같이 하면 됩니다.

::

:: select time::abstime from table_name where condition;

::

:: 간단하게 처리가 가능하죠. :/) 아니면 datetime() 함수를 이용해도 됩니다. 위의 방법은 casting 연

:: 산자를 이용한 방법이지요. :/) 이렇게 하면 그냥 익숙한 정수형으로 시간의 처리가 어느 정도 가능해

:: 집니다.

::

 

문제는

 

ioseph=# select '2038/01/19 12:14:06'::abstime::int;

?column?

////////////

2147483646

(1 row)

 

ioseph=# select '2038/01/19 12:14:07'::abstime::int;

?column?

////////////

2147483646

(1 row)

 

이것이겠지요.

 

또다른 문제는 시간자료형에 대한 연산부분일터인데,

시간에 대한 연산은 일반적으로 며칠/몇분 뒤/앞, 또는

생일 처럼 '모든년도의 같은 생일" 이런 연산이 되부분일터인데,

이런 연산을 위해서라면, unix C의 time 값(4byte interger)으로

처리하기보다는 PostgreSQL의 기본 날짜 자료형인 timestamp 를 쓰는 것이

훨씬 편할 것같네요.

 

/////////

여담으로 이곳 판매 데이터에 대한 테이블 설계를 다른 곳에서 했는데,

그곳에서는 날짜형을 varchar형로 했더군요.('20010122' 이런식으로)

(오라클을 사용하니까, 오라클의 date형보다는 varchar형이 입/출력하기에

편하니까 그렇게 했나봅니다)

 

이렇게 하다보니, 그냥 특정 날짜의 자료를 뽑는데는 별로 지장이 없는데,

앞에서 말한 날짜 관련 연산이 필요한 쿼리에서는 date형을 쓸때보다

훨씬 쿼리가 복잡해지더군요.

 

이처럼 날짜와 시간에 관련된 자료형 문제는

그 자료가 어떠한 용도로 쓰일 것인가?

이것에 따라서 적당한 자료형을 사용해야할 것같습니다.

 

(이부분은 딱히 꼭 이런 경우에는 이렇게 ... 저런 경우에는 저렇게...

이런 것이 없는 것 같습니다.

결국은 테이블설계자의 오랜 경험(그 무서운 직관력)에 달려있는 것같습니다)

[Top]
No.
제목
작성자
작성일
조회
2165ODBC를 이용한 원격 서버 DB 접속후 수정에 대하여
성은
2001-01-17
5654
2173┕>Re: ODBC를 이용한 원격 서버 DB 접속후 수정에 대하여
정재익
2001-01-18 16:06:05
6227
2159initdb두 안되구 됐다 쳐두 -N 128이 안되구 /tmp/.s.PGSQL.5432 어쩌구두 지워보구..그래두 안됩니다.
지로
2001-01-16
5400
2160┕>ln -s두 해봤습니다...ㅠㅠ
지로
2001-01-16 18:34:23
5689
2162 ┕>영어의 중요성....initdb: data path must be specified as an absolute path
지로
2001-01-16 18:21:48
5865
2163  ┕>위에 전부 질문입니다..
지로
2001-01-16 18:28:52
5345
2172  ┕>Re: 영어의 중요성....initdb: data path must be specified as an absolute path
정재익
2001-01-18 16:04:01
5750
2171 ┕>Re: ln -s두 해봤습니다...ㅠㅠ
정재익
2001-01-18 15:59:58
5624
2170┕>Re: initdb두 안되구 됐다 쳐두 -N 128이 안되구 /tmp/.s.PGSQL.5432 어쩌구두 지워보구..그래두 안됩니다.
정재익
2001-01-18 15:57:41
5338
2158게시판 소스를~~~~~~~~~
veryy
2001-01-16
5889
2166┕>Re: 게시판 소스를~~~~~~~~~
엠브리오
2001-01-18 13:25:27
6357
2155시간 정보를 PostgreSQL 에 저장하고자 한다면...
정재익
2001-01-16
5738
2185┕>Re: 시간 정보를 PostgreSQL 에 저장하고자 한다면... 2
김상기
2001-01-22 04:29:52
9241
2154PostgreSQL 7.0.3 설치가 안되요~
초보
2001-01-16
5093
2156┕>Re: PostgreSQL 7.0.3 설치가 안되요~
정재익
2001-01-16 12:16:34
5567
2157 ┕>한번 봐 주세요 ... 에러 화면 입니다.
초보
2001-01-17 09:29:19
5291
2152odbc의 conn.begintrans와 sql문의 begin work과의 차이는?
어떤생각
2001-01-15
4252
2153┕>Re: odbc의 conn.begintrans와 sql문의 begin work과의 차이는?
정재익
2001-01-16 00:09:05
4820
2164 ┕>트랜잭션 테스트를 해 봤는데 이상한 일이... 쩝
어떤생각
2001-01-16 20:20:49
4829
2169  ┕>Re: 트랜잭션 테스트를 해 봤는데 이상한 일이... 쩝
정재익
2001-01-18 15:28:47
5626
2150데이타 베이스 초기화는 성공했으니 데몬은 실패하는 이유가 몰까요?
나그네
2001-01-13
4403
2151┕>Re: 데이타 베이스 초기화는 성공했으니 데몬은 실패하는 이유가 몰까요?
정재익
2001-01-13 18:32:46
5531
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다