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 8992 게시물 읽기
No. 8992
함수의 결과값으로 여러행을 반환하고 싶은데요...
작성자
iyob
작성일
2012-05-17 16:48ⓒ
2012-05-17 16:49ⓜ
조회수
9,618

안녕하세요?

제목그대로 함수의 결과값으로 여러 행을 반환하고 싶은데요.

이게 테이블을 쿼리해서 결과를 반환하는게 아니라 매개변수로 지난 연월을 받으면 당월까지의 연월을 반환하려고 하는데 잘되지 않네요.

예를 들어 '2012-03'을 매개변수로 받으면

결과를

'2012-03'

'2012-04'

'2012-05'

반환이 되어야 합니다. 테이블을 만들어 값을 저장해서 반환하는게 아니라 루프로 위 결과를 만들어 반환하려고 합니다.

도움 부탁드립니다.

읽어주셔서 감사합니다.

이 글에 대한 댓글이 총 5건 있습니다.
postgres=# select generate_series('2012-04-01 00:00:00', '2012-08-01 00:00:00',
'1 month'::interval);
    generate_series
------------------------
 2012-04-01 00:00:00+09
 2012-05-01 00:00:00+09
 2012-06-01 00:00:00+09
 2012-07-01 00:00:00+09
 2012-08-01 00:00:00+09
(5 rows)


postgres=# select to_char(generate_series('2012-04-01 00:00:00', '2012-08-01 00:
00:00', '1 month'::interval), 'YYYY-MM');
 to_char
---------
 2012-04
 2012-05
 2012-06
 2012-07
 2012-08
(5 rows)


postgres=#
김상기(ioseph)님이 2012-05-17 23:17에 작성한 댓글입니다.

이런 함수도 있었군요.

정말 감사합니다. 많은 도움되었습니다.

그리고, 이곳에서 참 많은 도움을 받는데요, 전에는 거주지가 지방이라 오프라인모임에 참석하고 싶어도 못했는데 이제 수도권으로 이사를 와서 모임이 있으면 참석하고 싶습니다. 여러 고수님들 얼굴도 보고 고견도 듣고싶고... ^^

요즘은 잘 안모이시나요?

iyob님이 2012-05-18 17:15에 작성한 댓글입니다.
이 댓글은 2012-05-18 17:22에 마지막으로 수정되었습니다. Edit

실습해 보다가 한가지 의문점이 있어 추가 글을 드립니다.

select generate_series('2011-01-31', '2012-08-31', '1 month'::interval)::date;

 generate_series
-----------------
 2011-01-31
 2011-02-28
 2011-03-28
 2011-04-28
 2011-05-28
 2011-06-28
 2011-07-28
 2011-08-28
 2011-09-28
 2011-10-28
 2011-11-28
 2011-12-28
 2012-01-28
 2012-02-28
 2012-03-28
 2012-04-28
 2012-05-28
 2012-06-28
 2012-07-28
 2012-08-28
(20 rows)

 

처럼 나오는데 3번째 줄에서 03-31 네번째 줄에서 04-30 이렇게 나오도록 방법은 없나요?


 

iyob님이 2012-05-18 19:13에 작성한 댓글입니다. Edit

현재 그 함수는 차례로 계산 되기 때문에, 

 2월 28일에 한달 뒤가 되겠죠. 

 

만일 매달 말일을 구하고자 한다면, 

1일로 계산해서 하루를 빼는 식으로 계산 되어야할 것 같네요. 

 

select generate_series('2011-01-01', '2012-08-01', '1 month'::interval)::date - '1 day'::interval;

이런 식이어야할 것 같네요. 

 

김상기(ioseph)님이 2012-05-21 18:42에 작성한 댓글입니다.

답변 감사합니다. (상기님만 열심히 답변을 달아주시는군요 ^^;)

매월 말일을 구하고자 한 것은 아니고요 등록일이 30일이면 2월이 29일까지 있으면 29일로 표기되고 28일까지 있으면 28일로 표시하고자 했던 것이구요, 이게 단번에 되지는 않더군요. 다른 방식으로 처리하기로 했습니다.

그리고 특정 날짜가 맞늦지 확인하는 함수가 있나요?

예를 들어 '2011-02-29'이 존재하는 날짜인지 아닌지 여부를 확인하는 기존 함수가 있는지 궁금해서요.

php에서 checkdate 함수처럼요.

iyob님이 2012-05-22 17:06에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
8996Libeay32.dll 오류 [2]
구자은
2012-05-22
10806
8995현재 관리하고 있는 사이즈가 어떻게 되시나요? [1]
박병훈
2012-05-22
8948
8994UPSERT 직렬성 문제 [2]
김상기
2012-05-18
12037
8992함수의 결과값으로 여러행을 반환하고 싶은데요... [5]
iyob
2012-05-17
9618
8991mysql 에서의 변수 사용.. @rnum := @rnum + 1 같은 표현식을 사용할 수 있나요? [3]
김덕원
2012-05-17
9995
8990php의 exploder같은게 postgreSQL엔 없나요? [2]
이기자
2012-05-14
8699
8989DB연동 하는 방법좀 알려주세요 ㅜㅜ
지훈짱
2012-05-13
8681
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다