취준이랄까../SQLD

MYSQL) SUBSTRING, SUBSTRING_INDEX

넹넹선생님 2024. 10. 31. 10:23
728x90
반응형

[CONCAT]

두 컬럼을 조합하여 새로운 튜플로 된 컬럼을 생성하는 방법은 `CONCAT` 또는 `||` 연산자를 사용하여 두 컬럼의 값을 합치는 것입니다. 예를 들어, `first_name`과 `last_name`이라는 두 개의 컬럼을 합쳐서 새로운 `full_name` 컬럼을 만들고 싶다면 다음과 같은 SQL 쿼리를 사용할 수 있습니다.
=> 튜플 만들때도 사용할 수 있음


```sql
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;
```

또는 SQL 표준에서는 `||` 연산자를 사용할 수 있습니다.

```sql
SELECT first_name || ' ' || last_name AS full_name
FROM employees;
```

이렇게 하면 `first_name`과 `last_name` 컬럼을 합쳐서 `full_name`이라는 새로운 컬럼을 생성하게 됩니다.

### 관련 SQL 코딩 문제

**문제 1:**
`employees`라는 테이블에 직원의 이름(first_name)과 성(last_name) 컬럼이 존재한다. 각 직원의 이름과 성을 합쳐서 `full_name`이라는 컬럼을 출력하라. 결과는 아래와 같은 형태로 출력되어야 한다.

```
full_name
-------------
John Doe
Jane Smith
...
```

**문제 2:**
`products` 테이블이 있고, `product_name`과 `category_name` 컬럼이 존재한다. 각 제품 이름과 카테고리 이름을 결합하여 `Product - Category` 형식으로 출력하는 SQL 쿼리를 작성하라.

**문제 3:**
`orders` 테이블에는 `order_id`와 `customer_name` 컬럼이 있다. 두 컬럼을 결합하여 `Order ID: customer_name` 형식으로 나타내는 쿼리를 작성하고, 이를 새로운 컬럼 `order_info`로 출력하라.

 

>> 답

문제1: select concat(first_name, ' ', last_name) as full_name from employees

문제2: select concat(product_name, ' - ', category_name) as product_category from products

문제3: select concat(order_id,': ',customer_name) as order_info from orders

 

 

[SUBSTRING]

https://redcow77.tistory.com/264

 

 

[SUBSTRING_INDEX]

`SUBSTRING_INDEX` 함수는 지정된 구분자를 기준으로 문자열을 나누고, 특정 부분을 가져오는 MySQL 함수입니다.

```sql
SELECT SUBSTRING_INDEX('010-1234-5678', '-', 1);
```

이 쿼리의 결과는 `'010'`입니다.

`SUBSTRING_INDEX` 함수의 인자 의미는 다음과 같습니다:

- 첫 번째 인자 `'010-1234-5678'`: 처리할 문자열
- 두 번째 인자 `'-'`: 구분자로 사용할 문자열
- 세 번째 인자 `1`: 구분자를 기준으로 왼쪽에서부터 첫 번째 부분을 반환

따라서 `'010-1234-5678'`에서 `'-'`를 기준으로 첫 번째 부분인 `'010'`이 반환됩니다.

----------------

 `SUBSTRING_INDEX` 함수에서 세 번째 인자에 음수를 사용하면 오른쪽부터 가져올 수 있습니다. 

예를 들어, `'010-1234-5678'`에서 오른쪽부터 첫 번째 부분을 가져오려면 다음과 같이 작성할 수 있습니다:

```sql
SELECT SUBSTRING_INDEX('010-1234-5678', '-', -1);
```

이 쿼리의 결과는 `'5678'`입니다. 

### 동작 원리
- 세 번째 인자에 `-1`을 넣으면 구분자 `'-'`를 기준으로 오른쪽에서 첫 번째 부분을 반환합니다.
- 예를 들어, `-2`로 설정하면 오른쪽에서 두 번째 부분(`'1234-5678'`)을 반환합니다.

728x90
반응형