쿼리 대소문자 구분 - kwoli daesomunja gubun

요즘 자재 마스터를 클랜징 하는 일을 하고 있는데요. 파워쿼리가 작업에 많은 도움을 주고 있습니다.

자재의 명칭이 대문자와 소문자를 규칙없이 등록되어 있어서 이것을 골라내다가 매우 중요한 사실을 알게 되어 포스팅합니다. 

데이터 베이스에서는 데이터 값의 영문 대,소문자를 구분 할까요? 

제가 사용경험이 있는 2개의 DB만 따져보겠습니다. 
먼저. 오라클 DB 에서는 구분합니다. 그리고 MSSQL은 쿼리에서 구분을 하지 않습니다.
(물론 구분해서 쿼리하는 것도 가능합니다. 기본 기능이 그렇다는 얘기입니다. ) 

엑셀은 구분 할까요?

검색이나 필터, 수식에서 구분할까요? 

피벗 테이블로 구성하면 같은 항목으로 볼까요? 아니면 두줄로 나누어 별도의 데이터로 인식할까요? 

하나 씩 정리 해보죠~! 

1. 엑셀 시트에서 구분할까?

쿼리 대소문자 구분 - kwoli daesomunja gubun

위 그림은 엑셀 시트에서 테스트 해본 결과를 캡쳐 한 것입니다. 

엑셀 시트에서는 대.소문자를 구분하지 않습니다. 모두 같은값으로 인식하고 수식에 적용되는 논리도 동일합니다. Ctrl+F 로 찾기를 했을때도 동일하게 구분하지 않습니다. 

하지만 Ctrl+F 로 찾을때는 구분할 수 있는 옵션이 있습니다. 찾기 창에서 "옵션" 을 누르면 대소문자 구분 여부로 구분이 가능합니다. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

옵션에는 이것 외에도 여러 유용한 설정값이 있으니 사용해보세요. 

2. 그럼 파워쿼리에서는?

파워쿼리에서 어떻게 대소문자를 구분하는지 확인하기 위해서 간단한 단계를 추가하여 살펴보겠습니다. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

엑셀에서 테스트 했던 예제를 그대로 파워 쿼리로 옮겨와서 '조건 열 추가'를 해보겠습니다. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

대소문자 구분여부를 확인하기 위해서 데이터에 존재하지 않는 "selecT" 라는 끝에 대문자 T가 들어간 값과 일치 여부를 조건으로 넣었습니다. 같으면 '구분안하네' 같다고 하지 않으면 '구분하네' 입니다. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

결과는 위 그림처럼 파워쿼리는 대소문자를 구분합니다. 

3. 활용 방안은? 

제가 이번에 업무에 사용했던 것을 활용예로 들어볼께요. 작업 데이터 중 명칭을 정비 해야 할 일이 있었는데요. 입력되어 있는 값이 다소 엉망이었습니다. 그중 영문 대소문자의 규칙이 지켜지지 않은 것이 매우 보기 불편하더군요. 게다가 데이터 베이스에 따라 대소문자를 구분하는 것이 다르니 혼동 사유도 있을 것 같아서 수정하기로 결정을 했습니다. 

물론 엑셀은 대소문자를 구분하지 않으므로 그냥 '모두 바꾸기'로 처리하면 됩니다. 하지만 그전에 얼마나 다양하게 사용하고 있는지 살펴보고 싶었습니다. 

이때 파워쿼리로 데이터를 넘겨서 '그룹화' 기능을 사용하면 쉽게 대소문자 사용이 다른 동일 단어를 구분하여 개수를 셀 수 있습니다. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

 위 데이터를 대소문자가 다르게 사용된 유형별로 건수를 합산해야 한다면.. 

쿼리 대소문자 구분 - kwoli daesomunja gubun

여기서 그룹화를 처리 하면 

쿼리 대소문자 구분 - kwoli daesomunja gubun

쉽게 산출 할 수 있습니다. 

피벗 테이블도 대소문자 구분을 하지 않으므로 이렇게 구분하여 합산이 불가합니다.
(일단 저는 그렇게 알고 있습니다. 제가 모르는 다른 옵션이 있는지는 모르겠네요. 있다면 댓글 좀 부탁 드려요.)

쿼리에서 대소문자 비교하기

일반적으로 MySQL Where 조건에서 비교를 하면 대소문자 구분없이 값을 찾습니다.

이때 binary 펑션으로 감싸주면 대소문자 비교가 가능합니다~

member_table

idx

id

1

SangMin

2

sangmin

3

minsu

4

minyoung

이런테이블이있다고할때

select id from member_table where id = 'sangmin'

이렇게 쿼리를 하면 id 가 SangMin, sangmin 두개의 데이터를 가져오는데용

이런 경우에는 위의 쿼리문을 아래와 같이 변경하여 보면..

select id from member_table where binary(id) = 'sangmin'

binary 함수를 이용하면 대소문자를 구별해서 데이터를 가져옵니다

대소문자 구별이 필요한 곳에는 반드시 이용이 필요할 것입니다요~~