> For the complete documentation index, see [llms.txt](https://leeans-dev-book.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leeans-dev-book.gitbook.io/docs/lecture/database/sql.md).

# 문자다루는 SQL 함수

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

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

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

### 사칙연산

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

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

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

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

SQL도 비슷합니다.&#x20;

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

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

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

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

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

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

### **컬럼끼리의 연산도 가능**&#x20;

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

**사용금액**을 **결제횟수**로 나누면 됩니다.&#x20;

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

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

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

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

### **문자 덧셈도 가능**&#x20;

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

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

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

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

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

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FdT05s8z7xclqMuDja8QO%2FScreenshot_24.png?alt=media&amp;token=d89a52b8-cb4f-482d-b006-306f5277b7bd" alt=""><figcaption></figcaption></figure>

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

\+ 기호 쓰는 곳도 있습니다.&#x20;

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

### **문자 공백제거**

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

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

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

```sql
SELECT TRIM(고객명) FROM CARD
```

### **REPLACE**

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

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

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

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

### **SUBSTR**

원하는 문자만 뽑아낼 수 있습니다.&#x20;

SUBSTR(문자, 몇번째부터, 몇자)&#x20;

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

###

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

{% embed url="<https://docs.oracle.com/middleware/1221/biee/BIVUG/GUID-BBA975C7-B2C5-4C94-A007-28775680F6A5.htm#BILUG685>" %}

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

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

어짜피 3일 후에 다 까먹기 때문에&#x20;

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

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

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

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