MariaDB

MariaDB에서 문자열 합치기 방법

오아름 샘 2025. 6. 24. 10:55
반응형

## 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. 성능이 중요한 경우 문자열 연산을 애플리케이션 레벨에서 처리하는 것도 고려해보세요.

반응형