MariaDB에서 문자열 합치기 방법
## 1. CONCAT() 함수 사용 (기본 방법)
```sql
SELECT CONCAT('Hello', ' ', 'World') AS combined_string;
-- 결과: 'Hello World'
```
여러 개의 문자열을 연결할 수 있습니다. NULL이 포함되면 전체 결과가 NULL이 됩니다.
## 2. CONCAT_WS() 함수 사용 (구분자 포함)
```sql
SELECT CONCAT_WS('-', '2023', '05', '15') AS date_string;
-- 결과: '2023-05-15'
```
첫 번째 인자가 구분자로 사용되며, NULL 값은 무시됩니다.
## 3. 파이프 연산자(||) 사용 (ANSI 모드에서)
```sql
SET sql_mode = 'PIPES_AS_CONCAT';
SELECT 'Hello' || ' ' || 'World' AS combined_string;
-- 결과: 'Hello World'
```
## 4. GROUP_CONCAT() 함수 (그룹 내 문자열 합치기)
```sql
SELECT
plan_id,
GROUP_CONCAT(scenario_name SEPARATOR ', ') AS scenarios
FROM test_scenario
GROUP BY plan_id;
```
## 5. 문자열과 컬럼 값 합치기 예제
```sql
-- 테이블 데이터와 문자열 합치기
SELECT
CONCAT('계획 ID: ', plan_id, ', 이름: ', plan_name) AS plan_info
FROM test_plan;
-- 조건에 따른 문자열 합치기
SELECT
case_id,
case_name,
CONCAT(
'우선순위: ',
priority,
CASE
WHEN priority > 2 THEN ' (높음)'
ELSE ' (보통)'
END
) AS priority_info
FROM test_case;
```
## 6. NULL 처리 방법
```sql
-- NULL이 있어도 결과가 NULL이 되지 않도록 처리
SELECT CONCAT('Hello', IFNULL(NULL, ''), 'World') AS safe_concat;
-- 또는
SELECT CONCAT_WS('', 'Hello', NULL, 'World') AS safe_concat_ws;
```
## 7. 실제 적용 예시 (테스트 계층 구조 쿼리 개선)
```sql
SELECT
CONCAT('plan_', tp.plan_id) AS node_id,
NULL AS parent_id,
tp.plan_name AS name,
CONCAT('생성일: ', DATE_FORMAT(tp.created_date, '%Y-%m-%d'), ', 생성자: ', tp.created_by) AS details
FROM
test_plan tp
UNION ALL
SELECT
CONCAT('scenario_', ts.scenario_id) AS node_id,
CONCAT('plan_', ts.plan_id) AS parent_id,
ts.scenario_name AS name,
CONCAT('설명: ', IFNULL(ts.description, '없음')) AS details
FROM
test_scenario ts;
```
## 주의사항
1. CONCAT() 함수는 인수가 NULL이면 전체 결과가 NULL이 됩니다.
2. 매우 긴 문자열을 합칠 때는 `group_concat_max_len` 시스템 변수를 확인하세요.
3. 성능이 중요한 경우 문자열 연산을 애플리케이션 레벨에서 처리하는 것도 고려해보세요.