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 9931 게시물 읽기
No. 9931
문자열 안에서 컬럼 값을 어떻게 넣죠?
작성자
심상호(shimsh)
작성일
2018-01-19 15:31:49ⓒ
2018-01-19 15:33:32ⓜ
조회수
832
CREATE TABLE t_acceptamount
(
  ssaledate character varying(10),
  icnt integer,
  sstartmonth character varying(7),
)

 

 insert into T_AcceptAmount values('2017-05-15', 5, '2017-01')

5달을 더해서 불러내기는 됩니다.

select to_date (sstartmonth,'yyyy-mm') + interval '5mon' from T_AcceptAmount where ssaledate='2017-05-15'; 이것도 되고

select to_date (sstartmonth,'yyyy-mm') + interval '''||5||mon''' from T_AcceptAmount where ssaledate='2017-05-15'; 이것도 됨

결과

2017-06-01 00:00:00

 

그런데 5달 더하기 대신 icnt 컬럼 값을 넣어서 불러오기는 어떻게 하죠

select to_date (sstartmonth,'yyyy-mm') + interval '''|| icnt ||mon''' from T_AcceptAmount where ssaledate='2017-05-15';

오류 뜸

 

 

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

 interval '1 day' 라는 형태는 dynamic 쿼리 같은데서 쿼리 전체 문자열을 만들고 그것을 실행할 때는 가능하겠지만, 위 방식으로는 interval 뒤에 또 다른 연산자가 있어서 구문 오류가 납니다. 

이런 경우는 cast() 형변환 함수를 쓰는 것이 안전합니다. 

cast(icn || ' mon' as interval) 이 되겠죠. 

 

그런데, 윗 경우 처럼 저 icnt 칼럼이 딱 interval 형으로만 쓰인다면, 굳이 정수 자료형 보다는 칼럼 자체를 interval 형으로 만드는 것이 더 좋은 모델링으로 보이네요. 

그럼 그냥 + inct 로 끝나겠죠. 

김상기(ioseph)님이 2018-01-19 16:20:10에 작성한 댓글입니다.

 감사합니다.

심상호(shimsh)님이 2018-01-19 23:52:28에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
9935Table 의 Tablespace 변경 [1]
검콤이
2018-02-02
720
9934새 버전 업데이트마다 요약정리해놓은 사이트없을까요? [1]
test
2018-02-01
688
9932ipv6 이슈 질문드립니다. [4]
ljj
2018-01-26
849
9931문자열 안에서 컬럼 값을 어떻게 넣죠? [2]
심상호
2018-01-19
832
9930Postgresql ODBC 인서트 관련 문의 [4]
유저
2018-01-17
766
9929비밀번호 암호화 가능한가요? [1]
심상호
2017-12-31
985
9928vacuum 수행할때 archive생성? [1]
궁금
2017-12-14
1071
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.067초, 이곳 서비스는
	PostgreSQL v10.1로 자료를 관리합니다