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
운영게시판
최근게시물
Oracle Q&A 41635 게시물 읽기
No. 41635
문자열 변환 문의드립니다.
작성자
김대훈(willtuner)
작성일
2018-09-27 20:52:32
조회수
328

안녕하세요. 문자열 처리 관련해서 도움을 부탁드립니다.

미리 감사드립니다.

 

입력값           출력값

—————- ——————

홍길동       ==>  홍*동

database ==>  da****se

김수로왕    ==> 김**왕 

 

select ‘홍길동’ a from dual union all

select ‘database’ a from dual union all

select ‘김수로왕’ a from dual

 

이 글에 대한 댓글이 총 8건 있습니다.
with t AS (
    select '홍길동' a from dual union all
    select 'database' a from dual union all
    select '김수로왕' a from dual
) 
select     substrb(a,1,2) || lpad('*',length(a)-length(substrb(a,1,2) ||substrb(a, lengthb(a)-1, 2)),'*') || substrb(a, lengthb(a)-1, 2)
from t

한글이 2byte로 설정되었을때 예 입니다.
한글과 영어가 글자 단위가 아니라서
약간 복잡하네요 ^^

박인호(paerae)님이 2018-09-28 10:14:22에 작성한 댓글입니다.

입출력 예시가 좀 더 다양했으면 좋겠네요.
한글 이름 중에 2글자 짜리는 없는지? 혹시 1글자는 없는지?
영문이 4글자 이하로 되는 경우 어떤 결과가 나와야 하는지?
영문과 한글이 섞여 있는 경우는 없는지?
DB Character set 에도 영향을 받을 것 같습니다.

마농(manon94)님이 2018-09-28 10:20:46에 작성한 댓글입니다.

 

한글 이름 중에 2글자 짜리는 없는지? 혹시 1글자는 없는지?

=> 실제 고객이름이라서 1글자는 없을것 같습니다.

=> 2글자는 존재합니다. 이땐 뒷글자를 * 로 처리했으면 좋겠습니다.

 

영문이 4글자 이하로 되는 경우 어떤 결과가 나와야 하는지?

=> 4글자일 경우엔 뒷 2글자를 ** 로 처리했으면 좋겠습니다.

영문과 한글이 섞여 있는 경우는 없는지?

=> 사례는 없는것 같습니다만, 영문의 경우 공백은 들어갈 것 같습니다.

=> 만약 둘이 섞여 있다면 한글이 깨지진 않았으면 좋겠습니다만, 이 내용은 무시하셔도 될것 같습니다.

     (만약 가능하다면, a홍길동 => a홍*동  이라고 표기되면 좋겠습니다.)

 

핸드폰으로 글을 쓰다보니, 작성에 제한이 있는것 같습니다. 읽어주셔서 감사합니다.

김대훈(willtuner)님이 2018-09-28 10:45:59에 작성한 댓글입니다.

characterset 은  win949 입니다.

김대훈(willtuner)님이 2018-09-28 11:04:27에 작성한 댓글입니다.

4글자 이하는 1,2,3,4 자리수를 의미합니다.
뒤 두글자 * 표시로는 표현이 모호합니다.
1글자짜리는 없다, 2글자면 어떻게 표현하고 싶다
이렇게 글로 이렇다 저렇다 쓰지 마시고
가능한 모든 경우에 대한 데이터를 입력 대비 출력값으로 쭈욱 보여주세요.

마농(manon94)님이 2018-09-28 13:23:04에 작성한 댓글입니다.

내용이 많이 부족했었던 것 같습니다. (위 댓글 중에 내용도 일부 변경된 사항을 기재했습니다.)

1. 데이터(성명) 처리방법

- 한글 :  홍길동 -> 홍*동,  김수로왕 -> 김**왕,  두글 -> 두*

- 영어 :  database -> da****se, data -> da**, dat -> da*

- 특수기호 : da-ta -> da*ta, da ta -> da*ta, dat.a -> da*.a, data. -> da*a.

2. 입력조건

  한글은 2글자 이상(4바이트) 입력, 영문은 3글자 이상(3바이트) 입력

3. 특수기호

   점(‘.’), 하이픈(‘-‘), 공백(‘ ‘), 콤마(‘,’) 만 가능, 첫문자 특수기호 불가

   마지막은 특수문자 가능, 단 공백은 사전 trim 함

 

다시 한번 감사드립니다.

* 핸드폰으로 입력이 까다로운 것 같습니다. ㅠ (사파리 기준) 다음엔 다른 브라우저로 글 작성하겠습니다.

김대훈(willtuner)님이 2018-09-28 14:50:31에 작성한 댓글입니다.

WITH t AS
(
          SELECT '홍길동' v FROM dual --> 홍*동
UNION ALL SELECT '김수로왕' FROM dual --> 김**왕
UNION ALL SELECT '두글'     FROM dual --> 두*
UNION ALL SELECT 'database' FROM dual --> da****se
UNION ALL SELECT 'data'     FROM dual --> da**
UNION ALL SELECT 'dat'      FROM dual --> da*
UNION ALL SELECT 'da-ta'    FROM dual --> da*ta
UNION ALL SELECT 'da ta'    FROM dual --> da*ta
UNION ALL SELECT 'dat.a'    FROM dual --> da*.a
UNION ALL SELECT 'data.'    FROM dual --> da*a.
)
SELECT v
     , CASE WHEN gb = 'kor' THEN
            SUBSTR(v, 1, 1) ||
            CASE WHEN len = 2 THEN '*'
                 ELSE LPAD('*', len-2, '*') || SUBSTR(v, -1)
             END
            WHEN gb = 'eng' THEN
            SUBSTR(v, 1, 2) ||
            CASE WHEN len = 3 THEN '*'
                 WHEN len = 4 THEN '**'
                 ELSE LPAD('*', len-4, '*') || SUBSTR(v, -2)
             END
        END x
  FROM (SELECT v
             , CASE WHEN v > '가' THEN 'kor' ELSE 'eng' END gb
             , LENGTH(v) len
          FROM (SELECT TRIM(v) v FROM t)
        )
;

마농(manon94)님이 2018-10-01 15:41:52에 작성한 댓글입니다.

진심으로 감사드립니다. 좋은 하루하루 되십시오.

김대훈(willtuner)님이 2018-10-05 18:40:45에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41638PL/SQL로 서버로직을 짜는게 그렇게 잘못된 일인가요? [3]
C++
2018-10-01
330
41637SELECT에서의 NULL 때문에 계산이 오류가 납니다. [3]
애기씨
2018-10-01
269
41636특정 테이블의 컬럼별 데이터 조회 [2]
k62511
2018-09-29
277
41635문자열 변환 문의드립니다. [8]
김대훈
2018-09-27
328
41634매트릭스 자료작성(c,r,u,d) 급질문 [4]
입문자
2018-09-13
555
41633첫쨰주 토요일과 셋째주 토요일을 구하는 문제인데요 .. [2]
이병훈
2018-09-12
506
41632세로데이터를 가로로 변환 부탁드립니다 [1]
블루이글
2018-09-11
536
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2018 DSN, All rights reserved.
작업시간: 0.075초, 이곳 서비스는
	PostgreSQL v10.4로 자료를 관리합니다