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 8535 게시물 읽기
No. 8535
Fixed length substring 처리
작성자
박춘삼
작성일
2009-11-05 20:52ⓒ
2009-11-05 21:14ⓜ
조회수
7,417

김상기님, 생각보다 쉽지 않군요.

한번 더 부탁 드립니다.


drop table aa;

create table aa (a1 char(30), a2 char(20));

insert into aa values('가나다라마바사아아라앙','12345');

insert into aa values('가나다라 ','12345');

insert into aa values('가나abc다라 ','12345');

insert into aa values('','12345');


                   a1                     |          a2         

-------------------------------------------+----------------------

 가나다라                                  | 12345              

 가나abc다라                               | 12345              

 가나다라마바사아아라앙                    | 12345              

                                           | 12345              

(4 rows)

Time: 234.324 ms



select a1||rpad('',10 - octet_length(convert(cast(a1 as bpchar),'utf8','uhc')),' ')||'|'||a2 from aa;


           ?column?          

------------------------------

               |12345

 가나다라  |12345

 가나abc다라|12345

 가나다라마바사아아라앙|12345


3,4번째 줄이 문제네요. 이것을 어떻게 바이너리 자리수로 자를 수 있을까요?


저는 이렇게 만들고 싶습니다.

           ?column?          

------------------------------

                |12345

 가나다라   |12345

 가나abc다 |12345

 가나다라마|12345



부탁 드립니다.

박춘삼

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

글자를 자를려면

글자 하나하나 에 대해서 길이를 계산하여 합해가면서 해당 범위를 넘어서면 문자를 반환하는 함수를 하나 만들어야 할 거 같습니다.

tyro님이 2009-11-06 11:25에 작성한 댓글입니다. Edit

tyro 님 말처럼, 그렇기 때문에, 그쪽은 주로 응용프로그램 쪽에서 맡습니다.


굳이 만든다면, plpgsql 에서 만들 수는 있겠으나,

자료량이 많다면, 그 함수를 사용하는 비용자체가 만만찮을 듯싶네요.

DB에서 맡는다면, pad와, substring이 합쳐진 하나의 함수로 만들면 되지 않을까싶습니다.


의사코드:

문자열전체 길이를 바이트로 구하고,

그 값이 자르는 바이트보다 작으면, pad 해서 리턴하고,

그렇지 않으면,

한글자(substring) 씩 보태서 새로만 들어지는 문자열의 길이를 다시 바이트로 구해서,

그 값이 자르는 바이트를 초과한다면, 보태지 않고 리턴하거나, padding 문자 하나 보태서 리턴.


뭐, 이런식이 될 것 같네요.



그런데, 아직도, fixed pretty printing 기능을 사용해야한다는게 좀 의야스럽기는합니다.

text 기반 telnet bbs에서나 사용되던 기능인데 ....

김상기(ioseph)님이 2009-11-06 15:33에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
8538압축을 이용한 Restore 명령어 [2]
공대인
2009-11-12
7266
8537select로 인한 postgres 부하 [4]
초보
2009-11-11
9219
8536간단한 Postgresql용 쿼리 툴을 소개 부탁드립니다. [3]
박춘삼
2009-11-05
10529
8535Fixed length substring 처리 [2]
박춘삼
2009-11-05
7417
8534엉뚱질문: Oracle 로 사용하던 기업어플에 PostgreSQL 써도? [3]
지나는이
2009-11-04
8300
8532public 스키마를 사용 안해야 하나요? [4]
이정원
2009-10-27
8414
8531PostgreSQL UNIX/Linux 설치 옵션 참고
김대청
2009-10-27
7829
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다