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 8594 게시물 읽기
No. 8594
문자열 위치 검색
작성자
이경기(lkg1024)
작성일
2010-01-04 10:33
조회수
9,100

 안녕하세요. 처음으로 질문을 올립니다. ^^

 

문자열 중 위치를 알아내기 위한 함수가 있는지 궁금합니다.

 

예를 들어 'aa.bb.cc.dd.ee' 라는 문자열이 있을 경우 최초 '.' 이 위치한 position 값과 마지막 '.' 이 위치한 position 값을 구할 수 있을까요?

아니면 저 문자열 중에서 'bb.cc.dd' 라는 문자열만 추출 할 수 있는 방법이 있을까요?

 

'.' 의 개수와 문자열의 길이는 가변적으로 변할 수 있습니다.

그래서 처음 '.' 의 위치과 마지막 '.' 의 위치로 substring을 해야 하는데

 

Oracle에는 instr(문자열, 검색어, -1) 을 하면 마지막 position 값을 리턴하던데 mysql이나 postgreSQL에는 없는것 같네요

 

좋은 아이디어 있으시면 답변 부탁드립니다

눈 많이 내리네요. 눈길 조심하시구요. 좋은 하루 되세요

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

제가 아는 범위 안에서는 PostgreSQL 만큼 문자열 조작 관련 함수가 풍부한 데이터베이스가 없습니다.  덕분에 이기종 이식 작업을 할 때, 고생을 하지만.

http://postgresql.kr/docs/8.4/functions-string.html

문서를 참조 하세요.

 

김상기(ioseph)님이 2010-01-04 10:39에 작성한 댓글입니다.

DB 상이 아니라면,  프로그램 상에서 하는 것은 어떠신가요? 쿼리를 하여 1차적으로 걸러내고, 결과로 데이타를 뽑아낼 수 있을 것 같습니다.

김대청(dcmru)님이 2010-01-04 19:48에 작성한 댓글입니다.

CREATE OR REPLACE FUNCTION public.array_order_delete(anyarr anyarray, delarr integer[])
  RETURNS anyarray AS
$BODY$
declare
        retarr alias for $0;
        anyarrmaxcount int;
        delarrmaxcount int;
        i int default 1;
        y int default 1;
        hasarr boolean default false;
begin
    /*
    ♣ 배열의 순번을 찾아 삭제한다. 파라메터로 삭제할 순번을 배열로 받는다.
    ♣ 문자열배열이면 문자열배열로 숫자배열이면 숫자배열로 반환한다.

    예) select public.array_order_delete(string_to_array('a,b,c,d,e,f', ','),  array[1, 2]) as array;
    ------------------------------------------
    array (text[])
    ------------------------------------------
    {c,d,e,f}
    ------------------------------------------

    예) select public.array_order_delete(array[1, 2, 3, 4, 5, 1, 2, 3, 4, 5],  array[1, 3]) as array;
    ------------------------------------------
    array (integer[])
    ------------------------------------------
    {2,4,5,1,2,3,4,5}
    ------------------------------------------
    */

    anyarrmaxcount := array_upper(anyarr, 1);
    delarrmaxcount := array_upper(delarr, 1);
    retarr := '{}';

    if anyarr is null then
            return null;
    end if;

    while i <= anyarrmaxcount loop
        while y <= delarrmaxcount loop
            if i = delarr[y] then
                hasarr := true;
            end if;
            y := y + 1;
        end loop;
        if hasarr <> true then
            retarr := array_append(retarr, anyarr[i]);
        end if;
        hasarr := false;
        y := 1;
        i := i + 1;
    end loop;
    return retarr;
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION public.array_order_delete(anyarray, integer[]) OWNER TO postgres;

 

이렇게 함수를 하나 만들면 다음과 같이 하시면 됩니다.
 

select 
    public.array_order_delete(a.arr, array[1, array_upper(a.arr, 1)])
from
    (select string_to_array('a,b,c,d,e,f,g', ',') arr) a
 

결과는
 

"{b,c,d,e,f}"
 

여기를 참고하였습니다.
 

http://database.sarang.net/?inc=read&aid=6124&criteria=pgsql&subcrit=&id=&limit=20&keyword=array&page=2
 


 


 

우규님이 2010-01-07 06:38에 작성한 댓글입니다.
이 댓글은 2010-01-07 06:45에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
8599[질문] <IDLE> in transaction 해결할 수 있을까요??
초보가
2010-01-11
8160
8598. [1]
김보니
2010-01-07
7128
8597다시 한 번 더 한국어 full text search
김상기
2010-01-06
7329
8594문자열 위치 검색 [3]
이경기
2010-01-04
9100
8592[질문]트리거관한 질문..? [1]
나그네
2009-12-31
7115
8591데이터 베이스를 생성할 때 무의식적으로 설정하는 것 [2]
souler
2009-12-27
7689
8590기본키를 가지고 다른 테이블까지 영향을 주는 방법? [4]
souler
2009-12-27
7531
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다