2월 21, 2024

[PostgreSQL] Tab 들어가있는 데이터 확인 및 제거하는 방법

가끔 SQL을 조회하다 보면 varchar 데이터 뒤에 tab이 들어간 채로 저장이 된 경우가 보인다. 


보이기에는 제대로 된 데이터 같지만 length나 특정 조건으로 조건을 걸면서 조회를 할 때 필터링 되어 조회되지 않을 가능성이 있고 

나중에 Tab Separated 되어 csv 등으로 파일을 추출할 때도 문제가 될 수 있기 떄문에 오늘은 tab이 들어간 데이터들을 조회하고 이들 중 tab들을 제거하는 방법에 대해 알아보겠다. 


1. TAB 이 들어간 데이터 조회하기


chr(39)라는 아스키코드는 작은따옴표를 나타낸다고 지난 포스팅에서 다룬 적이 있었다. 

마찬가지로 TAB도 아스키코드를 사용하여 검출할 수 있다. 

TAB은 chr(9) 와 매핑되며 따라서  chr(9)를 사용하여 데이터를 조회할 수 있다.


예를 들어 EMP_NM (사원명) 에 tab이 들어간 데이터를 확인하고 싶다고 해보자.


SELECT * FROM 테이블명 WHERE EMP_NM (칼럼명) like CONCAT('%', chr(9), '%');


이렇게 조회를 할 수 있다.

chr(9)가 들어간 데이터들을 조회하기 위하여 CONCAT을 사용해서 like 조건으로 조회를 한 것이다. 


2. TAB 이 들어간 데이터 제거하기


그러면 이렇게 TAB이 들어간 데이터에서 TAB을 제거하려면 어떻게 해야할까? 


그럴 때는 REPLACE 함수를 써서 TAB을 empty string으로 교체해주면 된다. 


UPDATE 

테이블명 

SET EMP_NM(사원명) = REPLACE(EMP_NM, chr(9), '') 

WHERE EMP_NM (칼럼명) like CONCAT('%', chr(9), '%');



이런식으로 Replace 함수와 아스키문자를 활용하면 TAB 뿐 아니라 다른 특수문자가 들어간 데이터도 원하는 데이터로 쉽게 변경할 수 있다.