오라클 정규식 질문 0 13 5,968

by 오라클배우자 [Oracle 기초] 정규식 [2016.01.22 11:50:20]


안녕하세요 오라클 정규식 질문이 있어 글 올립니다.

정규식 사용하여 한글만 존재한는 컬럼을 찾으려고 하는데

여러 검색사이트를 검색해보니

한글 범위가 다 다르더라고요 

한글 범위 좀 알려주세요....

[가_힝], [가_힣], [가_힛] 이렇게 여러가지가 있더라고요....

 

by 아발란체 [2016.01.22 12:13:05]

말씀하신 방법을 쓰시면 됩니다.

영문,숫자,특수문자가 아닌 것을 포함하는 것으로 검색을 하면 일어,러시아어 등도 검색이 되고,

LENGTHB로 1BYTE 이상인 것만 해도 다른 나라 언어 검색이 되고,

한글만을 위한 검색, 일어만을 위한 검색이 없고,

한글 코드 값으로 검색하자니, 버전에 따라 바뀔 수 있고,

말씀하신, 가_힣 식의 범위 검색이 그나마 명확합니다.


by 마농 [2016.01.22 14:29:17]

언더바(_) 가 아니라 하이픈(-) 쓰셔야 하구요.

언어셋에 따라 다른데요.

유니코드라면? [가-힣]

KSC5601 이나 MSWIN949 라면? [가-힝] 정도가 적당한 듯 하네요.


by 오라클배우자 [2016.01.22 15:19:39]

답변 감사합니다~

혹시 반대로 한글로만 되어 있는걸 제외하려고 하는데 

NOT REGEXP_LIKE 로는 한글이 있으면 검색에서 제외가 되더라고요...

특수문자, 숫자, 영어 포함된 문자를 찾아내는 걸로 해야 되겠죠?

예를 들어 '가나다(ABC)'  이것도 다 제외가 되더라고요~


by 아발란체 [2016.01.22 15:55:58]

넹, 쉽게 한글을 정확하게 잡으셨다면, 말씀주신 것처럼 NOT를 써서 반대로 잡으면 됩니다.

가나다(ABC)도 당연히 포함되는 것 제외하라고 했으니 제외되겠죠.

포함이 아니라 전체 해당하는 것만 제외하는 것은 조건이 또 달라집니다.


by 오라클배우자 [2016.01.22 15:46:51]
WITH t AS 
( 
SELECT 'id94' id FROM dual 
UNION ALL SELECT '가나다라' FROM dual 
UNION ALL SELECT '가나다라(aaa)' FROM dual 
UNION ALL SELECT 'aaa_가나다라' FROM dual 
UNION ALL SELECT 'ㅁㅁㅁ' FROM dual 
UNION ALL SELECT 'aaa123' FROM dual 
UNION ALL SELECT '1234' FROM dual 
UNION ALL SELECT ' 1 2 3 4 ' FROM dual 
UNION ALL SELECT ' 1 ㄱ 2 ㄴ 3 ㄷ 4 ' FROM dual 
UNION ALL SELECT '궵런디ㅏㅓㄹ' FROM dual 
UNION ALL SELECT '꾸에~~붹뷇뷁' FROM dual 
UNION ALL SELECT 'adDS' FROM dual 
) 
SELECT * FROM t 
WHERE NOT REGEXP_LIKE(id, '[가-힣]') 
OR REGEXP_LIKE(id, '[:alnum:]') 
OR REGEXP_LIKE(id, '[:punct:]') 
; 

이런식으로 했는데 안걸리는게 몇개가 밑에서 2번째 3번째는 걸리지 않습니다.

혹시 방법이 있나요??

여기서는 '가나다라' 이것만 안나오게 하는 방법이 없을까요?


by 아발란체 [2016.01.22 15:58:06]

@.@)?

한글이 포함된 것을 찾는 것인가요?

한글이 미포함된 것을 찾는 것인가요?

순수 한글만 있는 "가나다라"만 찾는 것인가요?

 

순수 한글만 있는 "가나다라"만 찾는 것이라면

SELECT * FROM T WHERE REGEXP_REPLACE(id, '[가-힣]', '') IS NULL


by 오라클배우자 [2016.01.22 15:58:56]

답변 계속 달아주셔서 감사합니다.

순수 한글만 있는걸 제외 하고 찾는것입니다~

죄송합니다. 질문을 고쳤습니다.!! ^^:;


by 아발란체 [2016.01.22 16:00:35]

순수 한글만 있는 것을 제외 하는 것은 반대로

SELECT * FROM T WHERE REGEXP_REPLACE(id, '[가-힣]', '') IS NOT NULL

 


by 오라클배우자 [2016.01.22 16:01:57]

감사합니다!!!!

이런 방법이 있었네요!!!


by 마농 [2016.01.22 16:17:09]

언어셋은 확인해 보셨나요?

MSWIN949 의 경우 '힣' 이 '힝'보다 작습니다.

'[가-힣]'으로 점검시 '힝' 이 누락될 우려가 있습니다.


by 오라클배우자 [2016.01.22 16:31:54]

마뇽님 신경써 주셔서 감사합니다.

넹! 마뇽님 말씀처렁 '힣' 하면 누락되는것이 있어서 '힝'으로 했는데 언어셋 확인 하는 방법이 따로 있을까요?


by 오라클배우자 [2016.01.22 16:33:53]

네 확인 했는데 캐릭터셋 이 마뇽님 말씀처럼 mswin949 였습니다.

마뇽님 감사합니다.


by 오라클배우자 [2016.01.22 16:35:14]

아발란체님, 마뇽님 답변 잘 달아주셔서 너무 감사합니다.

많은 도움 됐습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입