IT
MySQL 정규식(regexp)검사를 통한 한글포함여부 체크
2011. 3. 17. 18:33
일반적으로 비밀번호에 영어/숫자가 아닌 한글이 들어가는 경우는 프로그램에서 Filtering하지 못한 경우가 대부분이다.
이렇게 들어간 데이터를 검색하고자 할때 regexp를 사용해서 검사하면 모두 검색할수 있다.
SELECT * FROM MEMBER
WHERE USER_PASSWORD REGEXP '[가-힣]';
추가로 정규표현식을 공부하면 쉽게 알수 있는 거지만
한글로 시작하는 경우엔 '^[가-힣]'
모두가 한글로 구성된 경우만 검색할경우엔 '^[가-힣]+$'
숫자 혹은 문자로만 된 데이터를 찾아야 하는 일이 생겨 기록해봄
REGEXP_LIKE와 REGEXP_REPLACE 함수를 써서 정규식을 활용한 판별을 진행
(REGEXP는 다양한 종류와 옵션이 있지만 다루지 않음)
1. 정규식
- [0-9] 숫자, [^0-9] 숫자 외의 것
- 그 외의 다양한 정규표현식이 있으니 구글링 ㄱ
2. WHERE절에 쓰는 REGEXP_LIKE을 이용하여 데이터 조회하기
- LIKE문 처럼 해당 정규식에 해당하는 데이터가 한자라도 포함되어 있으면 조회한다.
- NOT을 사용하여 숫자를 포함한 것들을 제외하면 숫자가 하나도 포함되지 않은 데이터를 조회한다.
- 반대로 NOT을 사용하여 숫자가 아닌 것을 포함한 모든 것을 제외하여 숫자로만 이루어진 데이터를 조회한다.
3. SELECT문 컬럼절에 REGEXP_REPLACE를 이용하여 데이터 조회하기
- 해당 정규식에 해당하는 데이터를 제외하고 데이터를 조회한다.
- [0-9]를 넣으면 데이터에서 숫자를 지우고 보여준다.
- [^0-9]를 넣으면 반대로 데이터 속 숫자만 보여준다.
4. 끝
- 숫자+문자로 된 데이터가 들어있는 컬럼을 '컬럼', 테이블을 '테이블'로 표기
with temp as ( select CLOB2 TXT from TB_TEMP_BLOB ) SELECT DISTINCT TO_CHAR(trim(regexp_substr(STR, '[가-힣]+', 1, level))) FROM (SELECT TXT STR FROM temp) t CONNECT BY trim(regexp_substr(str, '[가-힣]+', 1, level)) IS NOT NULL
안녕하세요.
특정 장문 텍스트 로부터 한글만 추출하려고 하는데요.
한글을 모두 추출하고자 하는데
위 처럼 하니까 퍼포먼스가 너무 안나옵니다. 그렇게 긴 데이터도 아닌데요. level이 5800안쪽이 끝인데
LEVEL이 점점 올라가면서 처음부터 계속 개수를 셈해서 공간복잡도 때문에 그런가 싶었는데
그런데 제가 직접 regexp_substr 4번째 파라미터에 5000 이런식으로 값을 임의로 주면
0.3초도 안돼서 결과값이 나오는거보니 그러한 로직으로 조회되는 건 아닌 것 같습니다.
사이즈가 큰 텍스트파일도 빠르게 regexp_substr를 loop 돌릴 수 있는 좋은 방법 없을까요?
감사합니다.
츄르사려고 코딩하는 코집사입니다.
오라클(Oracle)에서 데이터 베이스 안에 테이블에 있는 한글 데이터를 찾아야 되는 경우가 종종 발생하곤 합니다. 머리로는 이해를 하는데, SQL 쿼리 문을 짜는데 막막한 경우에 아래의 쿼리문을 사용하여 찾을 수 있습니다.
이번 글은 오라클(Oracle) SQL 데이터 안에 한글 데이터 찾는 방법입니다.
REGEXP_LIKE(COLUMN 명, '[가-힝]')으로 한글이 있는 데이터 찾기
아래의 예제 코드처럼, 테이블에서 어떤 열에 한글 데이터가 있는지 찾고 싶은지 넣어주면 됩니다.
SELECT * OR 컬럼명 FROM 테이블명 WHERE REGEXP_LIKE(어떤 열에서 찾을건지, '[가-힝]')예제 데이터
- A라는 테이블에서, NAME이라는 COLUMN 안에 한글이 있으면 모두 출력해라.
SELECT * FROM A WHERE REGEXP_LIKE(NAME, '[가-힝]')이와 반대로, 영어만 있는 데이터를 찾고 싶으면 위의 코드에서 NOT만 붙여주면 됩니다.
SELECT * OR 컬럼명 FROM 테이블명 WHERE NOT REGEXP_LIKE(어떤 열에서 찾을건지, '[가-힝]')이렇게, 한글 데이터가 있는 것들을 추출할 수 있습니다.
SELECT * FROM 테이블 WHERE 컬럼 LIKE '%[가-힣]%' -- 한글 정규식 SELECT * FROM 테이블 WHERE 컬럼 LIKE '%[A-Za-z]%' -- 영문 정규식
데이터가 한글인지 영문인지 판별하고 싶다면, 정규식을 이용하여 LIKE 문으로 찾으면 된다.
정규식 [가-힣] 은 한글 [가]에서 [힣] 까지 포함된 글자가 있다면 매칭된다.
정규식 [A-Za-z] 도 마찬가지로 대문자 A에서 Z 까지, 소문자 a에서 z 까지 매칭된다.
관심있을 만한 주제
- �Ϲ�
ȸ�� - ���
ȸ��
- Mysql/Oracle/Query/DB �������亯
- HOME > Q&A > Mysql/Oracle/Query/DB �������亯
- �˻��������
����� �ѱ��� ���� �ִ� �÷����� �ѱ۸� ������ �� �������? | ||
���ٱ��� | �� ¥11-12-21 13:10 | �� ȸ4169 |
//www.phpschool.com/link/qna_db/182527 ���� SyntaxHighlight�� ���� | ||
���� ��� 'Sakura ������' ��� �����Ͱ� �� �ʵ�ȿ� �ִٰ� �����ϸ�,
|
- �˻��������
- �ű� ��õ �亯 ��ȸ
- �Խù� 871��
0��õ 4�亯���� 29��ȸ
0��õ 5�亯���� 136��ȸ
0��õ 1�亯�Ϸ� 135��ȸ
0��õ 4�亯�Ϸ� 214��ȸ
0��õ 2�亯���� 272��ȸ
0��õ 2�亯�Ϸ� 251��ȸ
0��õ 5�亯�Ϸ� 234��ȸ
0��õ 4�亯���� 246��ȸ
mysql select �� Ư������ �˻��ϱ� ���� �帮�ڽ��ϴ�. num �÷� 4 4,9,10 1,3,4 1,4,14 1,14,26 �̷������� ���� �� ������ 4�� �� �ִ� 1,2,3,4 ��°�� ����ϰ� �ϰ� �ͽ��ϴ� �� 14�� �ִ°� ���� �ϰ� �ͽ��ϴ�. �̷����� select���� �Ʒ� �������� ��� �� ¥�� �ұ��?
HIT Source÷��
developerDG��2022-06-07 16:42:19
0��õ 0�̴亯 266��ȸ
0��õ 5�亯�Ϸ� 369��ȸ
0��õ 4�亯�Ϸ� 232��ȸ
0��õ 22�亯�Ϸ� 304��ȸ
0��õ 1�亯�Ϸ� 266��ȸ
0��õ 1�亯���� 399��ȸ
0��õ 1�亯���� 478��ȸ
0��õ 3�亯�Ϸ� 711��ȸ
0��õ 2�亯�Ϸ� 466��ȸ
0��õ 2�亯�Ϸ� 292��ȸ
0��õ 0�̴亯 511��ȸ
0��õ 2�亯�Ϸ� 359��ȸ