문자다루는 SQL 함수

컬럼에 있던 데이터를 정직하게 출력만 하는건 재미가 없습니다.

실은 컬럼에 있던 데이터를 덧셈 뺄셈 곱셈 나눗셈으로 조작해서 출력하는 것도 가능한데

그래서 오늘은 컬럼에 있던 데이터를 내 입맛에 맞게 조작해서 출력하는 법을 알아봅시다.

사칙연산

card 테이블 보면 '사용금액' 컬럼이 있습니다.

근데 그 금액엔 10% 부가세가 포함이 되어있기 때문에

10% 부가세를 제외한 사용금액만 출력하고 싶으면 어떻게하죠?

엑셀이면 = 옆의컬럼 * 0.9 라고 코드를 짰을 텐데

SQL도 비슷합니다.

select 사용금액 * 0.9 FROM card
select 사용금액 * 0.9 AS 부가세제외, 연체횟수 + 100 FROM card

그냥 컬럼명에 0.9 곱해버리면 됩니다.

그럼 사용금액 컬럼이 출력되는데 0.9 곱해져서 나옵니다.

당연히 동시에 여러 컬럼도 가능하고

AS 쓰고 싶으면 써도 됩니다.

(추가) 원본데이터를 조작하는게 아니라 출력되는 값만 계산 하는것임!

컬럼끼리의 연산도 가능

고객의 "결제당 평균 사용금액"을 출력하고 싶으면 어떻게할까요?

사용금액결제횟수로 나누면 됩니다.

다행히 SQL 에선 컬럼끼리의 사칙연산도 가능합니다.

select 사용금액 / 결제횟수 FROM card

이러면 행마다 사용금액을 결제횟수로 나눠서 출력해줍니다.

컬럼끼리도 연산이 가능하다는거 잘 기억해둡시다.

문자 덧셈도 가능

사칙연산은 당연히 숫자가 들어있는 컬럼에만 적용가능합니다.

문자끼리 양옆을 이어붙여서 더할 수는 있습니다.

예를 들어서 현재 테이블에서 "James" + "vip" 이렇게 컬럼에 있는 문자 2개를 이어붙여서 출력하고 싶은겁니다.

그럼 문자합치기용 CONCAT() 함수를 사용합니다.

SELECT CONCAT(고객명, 고객등급) FROM card 

Postgres, Oracle 등의 DBMS는 || 기호를 사용해서 문자를 보통 합칩니다.

+ 기호 쓰는 곳도 있습니다.

SELECT 고객명 || ' is ' || 고객등급 FROM card 

문자 공백제거

문자 데이터에 쓸데없는 좌우 공백같은게 들어있을 수도 있는데

그걸 제거하고 싶으면 TRIM() 안에 넣으면 됩니다.

그럼 안에 있는 문자는 좌우 공백이 제거됩니다.

SELECT TRIM(고객명) FROM CARD

REPLACE

원하는 단어를 다른 단어로 전부 바꿀 수 있습니다.

REPLACE(바꿀문자, 이걸찾아서, 이걸로바꿔줘) 채워주면 됩니다.

참고로 SELECT 다음에 문자나 숫자만 달랑 넣어도 잘 출력해줌

SELECT REPLACE (고객등급, 'vip','VVIP') FROM CARD

SUBSTR

원하는 문자만 뽑아낼 수 있습니다.

SUBSTR(문자, 몇번째부터, 몇자)

SELECT SUBSTR(고객명, 1,3) FROM CARD 

아무튼 결론은 DBMS에선 문자나 숫자데이터를 쉽게 변형할 수 있는 함수들이 많이 제공됩니다.

이걸 쭉 공책에 정리하고 외우는 분들이 있는데

1990년대면 그렇게 하라고 강요했겠으나 요즘은 구글이 있기 때문에 외우는건 인생낭비입니다.

어짜피 3일 후에 다 까먹기 때문에

"컬럼에 있던 데이터를 맘대로 조작해서 출력가능하구나" 이것만 이해하고 가면 됩니다.

그리고 필요할 때 구글에 "ORACLE 문자 공백제거" 검색하는게 올바른 코딩방법입니다.

Q1. PRODUCT 테이블의 상품명 컬럼을 모든 공백을 제거해서 출력하려면 어떻게 코드를 짜야할까요?

Q2. EMPLOYEE 테이블에 번호 컬럼을 추가하고 핸드폰 번호를 무작위 입력 후 뒷 4자리만 출력해보시오.

Last updated