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 9228 게시물 읽기
No. 9228
트리거 함수 작성하는데 막히는 부분이 있습니다.
작성자
이기자(k3i2)
작성일
2013-02-01 18:38ⓒ
2013-02-01 18:43ⓜ
조회수
8,594


ls_s_set_yymm에 '1302' 이런식으로 2013년02월의 '1302'이 스트링값으로 들어가있습니다.
이게 1301에서 +1 되어서 1302가 된건데요,
예를들어 1312가되면 +1하면 1313이 되어버려서 틀리게됩니다.
1401이 나와야되는거죠.
프로그램으로 처리되면 쉽게하겠는데, 트리거로 간단하게 기능추가를 할려니 막히는부분이 있네요.
아래가 뒤 2자리를 비교해서 '13'보다 크거나 같으면 앞두자리에 +1을 하고 뒤 두리리에 '01'을 해서 붙일려고하는 부분입니다.
근데, 문자형이다보니 +1을할려면 떼어서 수치형으로 변환해서 증가해서 문자형으로 바꿔서 '01'을 뒤에 붙여서 다시 ls_s_set_yymm에 넣어줘야되는데
그부분을 모르겠습니다. 좀 도와주세요. T.T;

-- 증가된 뒷 두자리(월)이 13이면 앞두자리(년도의뒤2자리)를 1증가하고 뒷두자리를 '01'로 수정한다.
   if substring(ls_s_set_yymm,3,2)>='13' then
   
   end if;
 

혹시
if substring(ls_s_set_yymm,3,2)>='13' then
     ls_s_set_yymm = (substring(ls_s_set_yymm,1,2)::integer +1)::character + '01' ;
end if;

이렇게하면 정상적으로 될가요?
테스트를 못해보니 12월지나고 정상 작동할지 걱정입니다.

이 글에 대한 댓글이 총 1건 있습니다.

날짜라는 놈은 아주 독특한 자료형입니다. 깊게 들여다보면 들여다 볼 수록 심오한 자료형입니다. :)

날짜를 문자열로 저장할 때 그 자료의 조작은 다시 날짜로 변환해서 하고, 

DB에 기록할 때는 다시 문자열로 변환을 해서 하는 것이 안전합니다. 

그 자료의 조작을 문자열이나, 숫자형으로 계산하는 것은 아주 위험한 발상입니다. 

 

그래서 윗 경우라면, 일단 to_date나 , to_timestamp 같은 함수로 자료형을 바꾸고, 

그 변환된 날짜 자료형을 날짜 연산자를 이용해서 계산을 하고, 

그 계산 결과를 다시 문자열로 바꿉니다. 

 

ioseph=# select to_char(to_date('1212', 'YYMM') + cast('1 month' as interval), 'YYMM');
 to_char
---------
 1301
(1 row)
 

김상기(ioseph)님이 2013-02-04 11:11에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9231정렬에 대하여 물어봅니다.(순번 정렬입니다만 예외조건을 넣는 방법) [6]
송민재
2013-02-06
9160
9230트리거관련해서 궁금중이 생겼습니다.... [2]
김원진
2013-02-05
9140
9229다중행 서브쿼리 update 방법 [2]
효연
2013-02-04
9528
9228트리거 함수 작성하는데 막히는 부분이 있습니다. [1]
이기자
2013-02-01
8594
9227duplicate key value violates unique constraint 에러 질문이요~~~ [5]
조민경
2013-02-01
14164
9226db의 select 성능에 대한 질문 [2]
김대현
2013-02-01
9776
9225c언에서 postgresql 접속하는 소스 없을까요?? [2]
초보개발자
2013-01-29
8523
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.027초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다