IT/MSSQL

[MSSQL] LEN, REPLACE - PART 1

유자애플 2020. 6. 15. 01:55
반응형

Create Table #TEST1(

Name Varchar(20), --이름
age Int, --나이
Assets Int, --자산
Liabilities Int, --부채
job Nvarchar(10) --직업

)

Insert Into #TEST1 values ('이혜진(여자)', 28, 3000, 1300, '선생님')
Insert Into #TEST1 values ('이치현'(남자), 27, 5000, 1300, '학원강사')
Insert Into #TEST1 values ('이수정(여자)', 31, 2000, 2300, '선생님')
Insert Into #TEST1 values ('최덕희(남자)', 27, 1000, 3000, '연구원')
Insert Into #TEST1 values ('강남수(남자)', 36, 2000, 1400, '학원강사')

1. 

LEN

문자열 갯수 확인

SELECT LEN(Name) 
FROM #TEST1

다음 쿼리를 실행하면 Name 컬럼의 모든 데이터가 숫자 형태로 나옵니다.
지금 임시 테이블로 진행할 경우 모두 7이 나오는거를 확인할수 있습니다.
다른 컬럼으로 해도 그 컬럼의 문자열의 갯수 만큼 출력되는 것을 확인할 수 있습니다.

2. REPLACE 특정 문자 변경

SELECT  (REPLACE(Name,'(',''))
FROM #TEST1

위의 쿼리를 실행하면 Name에서 '(' 이 문자가 사라진채로 출력됩니다.
그 이유는 REPLACE는 (REPLACE(컬럼이름, 타켓 문자, 변경 문자)) 이런식으로 진행됩니다.
그러니 지금 현재 (  ->  '' 변경 문자가 없으니 삭제되는 것입니다.

SELECT  (REPLACE(Name,'(','['))
FROM #TEST1

위의 쿼리를 실행하면 Name에서 '(' 이 문자가 자리에 '[' 문자가 출력됩니다.
위 컬럼은 현재 (  ->  [ 문자로 변경해 주는 것입니다. 

그런데 현재 Name를 보면 괄호가 (열렸다. )닫히는게 보이는데 이 두개 모두 삭제하고 싶다면 어떻게 할까요?
그것도 안에 있는 여자,남자를 삭제하지 않고서 말입니다.
(REPLACE(Name, '(남자)', '')) 이렇게 할경우 전체는 삭제할수 있지만 따로 괄호만 삭제가 안됩니다.
그러니 REPLACE 한번더 사용해 줍니다.

SELECT (REPLACE(REPLACE(Name,'(','')), ')', ''
FROM #TEST1

이렇게 말이죠 위 쿼리를 실행하면 괄호가 열리고 닫히는게 모두 사라지는 것을 알수 있습니다.
이 이외에도 더 없애고 싶다면 연속된다면 같이 진행하면 되지 또 서로 떨어져 있다면 REPLACE를 더욱 중복으로
사용하여 없애주시면 됩니다.

그럼 위의 설명한 LEN과 REPLACE를 통해 특정 문자의 갯수를 구하고자 합니다.

SELECT LEN(Name) -LEN((REPLACE(Name,'(',''))
FROM #TEST1

전체 LEN에서 특정한 값이 사라진 LEN을 빼줍니다. 이렇게 된다면 온전한 LEN의 경우 7이 되고
온전하지 못한 (가 삭제된 LEN은 6이 되면서 7-6은 1이 되면서 컬럼데이터에 1만 출력이 되게 됩니다.

오늘은 LEN 문자열의 갯수 구하는 함수와
REPLACE 특정 문자열을 바꿔주는 함수를 사용해서 특정 문자열의 갯수를 구하는 방법을 하였습니다.
다음에는 특정 문자열 앞의 문자열만 가져오는 쿼리를 만들려고 합니다.
PRAT 2도 기대해주시기 바랍니다 이만 들어가겠습니다^^

반응형