FireBird Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
파이어버드 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
IBPhoenix
FireBird Main site
볼랜드포럼 광고 모집

FireBird Q&A
[2278] Re:오라클의 Replace 와 같은 함수가 먼가요?
civilian,안영제 [civilian] 3982 읽음    2006-11-28 20:55
create procedure lib_string_replace (
                     strg_in varchar( 32765),
                     strg_beg smallint,
                     strg_search varchar( 32765),
                     strg_replace varchar( 32765))
                   returns (
                     strg_out varchar( 32765),
                     strg_replaced smallint)
  as
    declare variable strg_comp varchar( 32765);
    declare variable strg_pre varchar( 32765);
    declare variable strg_pst varchar( 32765);
    declare variable strg_len_orig smallint;
    declare variable strg_len_srch smallint;
    declare variable strg_len_repl smallint;

    begin
      /*
        replace substring
          str_beg : 1 ..

        examples:
          execute procedure lib_string_replace :strg_in, 1, 'to_replace', 'replacement'
                                               returning_values :strg_out, :strg_replaced;

          select my_table.my_text,
                   (select lib_string_replace.strg_out
                      from lib_string_replace( my_table.my_text, 1, 'MEMO:', 'Memo:'))
            from my_table;

          update my_table
            set my_table.my_text =
                  (select lib_string_replace.strg_out
                     from lib_string_replace( my_table.my_text, 1, 'MEMO:', 'Memo:'));
      */

      if (   (strg_in is null)
          or (strg_beg is null)
          or (strg_beg <= 0)
          or (strg_search is null)
          or (strg_replace is null))
        then
          begin
            strg_out = null;
            strg_replaced = null;
          end
        else
          begin
            strg_replaced = 0;
            execute procedure lib_string_len :strg_in
                                             returning_values :strg_len_orig;
            execute procedure lib_string_len :strg_search
                                             returning_values :strg_len_srch;
            execute procedure lib_string_len :strg_replace
                                             returning_values :strg_len_repl;

            while (strg_len_srch + strg_beg - 1 <= strg_len_orig)
              do
                begin
                  execute procedure lib_string_len :strg_in returning_values :strg_len_orig;

                  execute procedure lib_string_sub :strg_in, :strg_beg, strg_len_srch
                                                   returning_values :strg_comp;

                  if (strg_comp || '.' = strg_search || '.')
                    then
                      begin
                        execute procedure lib_string_sub :strg_in, 1, :strg_beg - 1
                                                         returning_values :strg_pre;
                        execute procedure lib_string_sub :strg_in, :strg_beg + :strg_len_srch,
                                                         :strg_len_orig - (:strg_beg + :strg_len_srch) + 1
                                                         returning_values :strg_pst;
                        strg_in = strg_pre || strg_replace || strg_pst;

                        strg_beg = strg_beg + strg_len_repl - strg_len_srch;

                        strg_replaced = strg_replaced + 1;
                      end

                  strg_beg = strg_beg + 1;
                end

            strg_out = strg_in;
          end

      suspend;
    end

지원하지 않는 함수는 만들어서 사용해야 합니다.

출처 : http://www.danner-net.de/fb.htm


^^ 님이 쓰신 글 :
: 오라클에선
:
: SELECT REPLACE('JACK and JUE','J','BL') FROM DUAL;
:
: 이런식으로 'J' 문자를 'BL'로 변경할 수 있는데...
:
: 불새에선 REPLACE를 쓸 수 없네요..
:
: 문자열을 치환 할 수 있는 함수 아시는분 알려주세요~~

+ -

관련 글 리스트
2270 오라클의 Replace 와 같은 함수가 먼가요? ^^ 6191 2006/11/25
2278     Re:오라클의 Replace 와 같은 함수가 먼가요? civilian,안영제 3982 2006/11/28
2280         Re:Re:감사합니다(냉무) ^^ 1544 2006/11/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.