SQL에서 컬럼 데이터 유형을 변경하고 데이터를 캐스트하는 방법

SQL 데이터베이스를 다룰 때 컬럼의 데이터 유형을 변경해야 하는 상황이 발생할 수 있습니다. 예를 들어, 문자열로 저장된 데이터를 숫자로 처리하거나 데이터의 정밀도를 높이기 위해 데이터 유형을 변경하고 싶을 때입니다. 이 글에서는 SQL에서 컬럼의 데이터 유형을 변경하는 방법과 기존 데이터를 적절하게 캐스트하는 방법을 구체적인 예시와 함께 자세히 설명합니다.

목차

컬럼 데이터 유형 변경의 기본

SQL에서 컬럼의 데이터 유형을 변경하는 기본적인 방법은 ALTER TABLE 문을 사용하는 것입니다. ALTER TABLE 문을 통해 테이블 구조를 변경하고 특정 컬럼의 데이터 유형을 적절한 형식으로 변경할 수 있습니다.

ALTER TABLE 문의 기본 구문

ALTER TABLE 문의 기본 구문은 다음과 같습니다:

ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 데이터형;

이 구문을 사용하여 기존 테이블 내의 특정 컬럼의 데이터 유형을 변경할 수 있습니다.

예: VARCHAR형에서 INT형으로 변경

예를 들어, 컬럼 ‘age’를 VARCHAR형에서 INT형으로 변경하려면 다음과 같은 SQL 문을 사용합니다:

ALTER TABLE users
ALTER COLUMN age INT;

이렇게 해서 필요에 따라 데이터 유형을 변경할 수 있습니다.

데이터 유형 변경 시 주의사항

컬럼의 데이터 유형을 변경할 때는 몇 가지 중요한 주의사항이 있습니다. 이러한 사항을 고려하지 않으면 데이터 손실이나 오류가 발생할 수 있습니다.

데이터의 호환성

새로운 데이터 유형이 기존 데이터와 호환되는지 확인해야 합니다. 예를 들어, VARCHAR형을 INT형으로 변경할 경우, 문자열로 저장된 데이터가 모두 숫자임을 확인해야 합니다. 숫자가 아닌 데이터가 포함되어 있으면 변경이 실패합니다.

예: 숫자가 아닌 데이터 확인

변경 전에 데이터를 확인하는 SQL 문 예:

SELECT *
FROM users
WHERE ISNUMERIC(age) = 0;

이 SQL 문으로 숫자가 아닌 데이터가 존재하는지 확인할 수 있습니다.

데이터 트렁케이션

데이터 유형을 축소할 경우 (예: VARCHAR(100)에서 VARCHAR(50)으로 변경), 데이터가 잘릴 수 있습니다. 데이터가 손실되지 않도록 사전에 데이터 길이를 확인하고, 필요에 따라 데이터를 수정하는 것이 중요합니다.

예: 데이터 길이 확인

데이터 길이를 확인하는 SQL 문 예:

SELECT *
FROM users
WHERE LEN(name) > 50;

이 SQL 문으로 VARCHAR(50)에 맞지 않는 데이터를 확인할 수 있습니다.

데이터 백업

데이터 유형의 변경은 되돌릴 수 없는 작업이므로, 반드시 사전에 데이터베이스 전체의 백업을 받아 두는 것이 권장됩니다. 백업이 있으면 문제가 발생했을 때 원래 상태로 복원할 수 있습니다.

트랜잭션의 이용

데이터 유형 변경은 트랜잭션 내에서 실행하는 것이 좋습니다. 이를 통해 작업이 중간에 실패하더라도 데이터베이스의 일관성을 유지할 수 있습니다.

예: 트랜잭션의 이용

트랜잭션 내에서 데이터 유형을 변경하는 예:

BEGIN TRANSACTION;

ALTER TABLE users
ALTER COLUMN age INT;

COMMIT;

이렇게 해서 안전하게 컬럼의 데이터 유형을 변경할 수 있습니다.

데이터 캐스트란

데이터 캐스트는 데이터를 한 유형에서 다른 유형으로 변환하는 작업을 말합니다. SQL에서 데이터 캐스트는 서로 다른 데이터 유형 간의 변환이 필요할 때 자주 사용됩니다.

데이터 캐스트의 중요성

데이터 캐스트는 다음과 같은 시나리오에서 중요합니다:

  • 데이터 형식이 다른 테이블 간에 데이터를 이동할 때
  • 데이터의 계산이나 비교를 수행할 때 같은 데이터 유형으로 처리해야 하는 경우
  • 리포트나 분석에서 특정 데이터 유형이 필요한 경우

암묵적 캐스트와 명시적 캐스트

SQL에서는 캐스트에는 암묵적 캐스트와 명시적 캐스트 두 가지가 있습니다.

암묵적 캐스트

암묵적 캐스트는 SQL 엔진이 자동으로 데이터 유형을 변환하는 경우입니다. 예를 들어, 숫자형 데이터를 문자열로 처리할 때 등입니다.

SELECT 'The age is ' + age
FROM users;

이 경우, age가 숫자형이더라도 자동으로 문자열형으로 변환됩니다.

명시적 캐스트

명시적 캐스트는 SQL 문에서 명시적으로 데이터 유형을 변환하는 작업입니다. 이를 위해 CAST 함수나 CONVERT 함수를 사용합니다.

예: CAST 함수 사용

CAST 함수를 사용하여 데이터 유형을 변환하는 예입니다:

SELECT CAST(age AS VARCHAR(3)) AS age_str
FROM users;

이 SQL 문에서는 숫자형 age를 문자열형으로 변환합니다.

예: CONVERT 함수 사용

CONVERT 함수를 사용하여 데이터 유형을 변환하는 예입니다:

SELECT CONVERT(VARCHAR, age) AS age_str
FROM users;

이 SQL 문 역시 숫자형 age를 문자열형으로 변환합니다.

데이터 캐스트를 적절히 사용함으로써 데이터의 일관성을 유지하면서 유연하게 데이터를 다룰 수 있습니다.

CAST 함수 사용법

SQL의 CAST 함수를 사용하면 데이터를 한 데이터 유형에서 다른 데이터 유형으로 명시적으로 변환할 수 있습니다. CAST 함수는 데이터베이스의 다양한 작업이나 리포트 작성 시 매우 유용합니다.

CAST 함수의 기본 구문

CAST 함수의 기본적인 구문은 다음과 같습니다:

CAST (expression AS data_type)

여기서 expression은 변환하려는 데이터이고, data_type은 변환할 대상 데이터 유형입니다.

예: 숫자에서 문자열로 변환

다음 예에서는 숫자형 age 컬럼을 문자열형으로 변환합니다:

SELECT CAST(age AS VARCHAR(3)) AS age_str
FROM users;

이 SQL 문에서는 age 컬럼의 숫자 데이터를 길이 3의 문자열로 변환하고, 새로운 컬럼 이름 age_str로 결과를 표시합니다.

다른 데이터 유형으로 캐스트

CAST 함수는 다양한 데이터 유형 간의 변환에 사용할 수 있습니다. 몇 가지 예를 보여드립니다.

문자열에서 날짜로 변환

문자열 데이터를 날짜형으로 변환하는 예입니다:

SELECT CAST('2024-05-31' AS DATE) AS formatted_date;

이 SQL 문에서는 문자열 '2024-05-31'을 날짜형으로 변환하고 formatted_date로 표시합니다.

문자열에서 숫자로 변환

문자열 데이터를 숫자형으로 변환하는 예입니다:

SELECT CAST('12345' AS INT) AS number_value;

이 SQL 문에서는 문자열 '12345'을 정수형으로 변환하고 number_value로 표시합니다.

CAST 함수 응용 예

CAST 함수는 특히 데이터 필터링이나 집계 작업에 유용합니다.

예: 집계 작업에서 사용

예를 들어, 문자열형 컬럼을 숫자형으로 변환한 후 집계를 수행하는 경우:

SELECT SUM(CAST(price AS DECIMAL(10, 2))) AS total_price
FROM sales;

이 SQL 문에서는 price 컬럼의 문자열 데이터를 소수형으로 변환하여 합계를 계산하고 total_price로 표시합니다.

CAST 함수 사용 시 주의사항

CAST 함수를 사용할 때는 데이터 유형 간의 호환성에 주의해야 합니다. 호환되지 않는 데이터 유형으로 변환을 시도하면 오류가 발생할 수 있습니다. 또한, 대규모 데이터셋에 대해 자주 캐스트를 수행하면 성능에 영향을 미칠 수 있습니다.

CAST 함수를 적절히 사용하면 데이터 조작의 유연성이 높아지며, 다양한 데이터 유형 간의 변환을 쉽게 수행할 수 있습니다.

CONVERT 함수 사용법

SQL의 CONVERT 함수는 데이터 유형을 변경하는 또 다른 방법입니다. CONVERT 함수는 CAST 함수와 유사하지만, 데이터베이스 시스템에 따라 더 많은 옵션이나 형식을 제공할 수 있습니다.

CONVERT 함수의 기본 구문

CONVERT 함수의 기본적인 구문은 다음과 같습니다:

CONVERT(data_type, expression, style)

여기서 data_type은 변환할 데이터 유형, expression은 변환할 데이터, style은 선택적으로 형식 스타일을 지정합니다.

예: 숫자에서 문자열로 변환

다음 예에서는 숫자형 age 컬럼을 문자열형으로 변환합니다:

SELECT CONVERT(VARCHAR, age) AS age_str
FROM users;

이 SQL 문에서는 age 컬럼의 숫자 데이터를 문자열형으로 변환하고 새로운 컬럼 이름 age_str로 결과를 표시합니다.

다른 데이터 유형으로 변환

CONVERT 함수는 CAST 함수와 마찬가지로 다양한 데이터 유형 간의 변환에 사용할 수 있습니다. 몇 가지 예를 보여드립니다.

문자열에서 날짜로 변환

문자열 데이터를 날짜형으로 변환하는 예입니다:

SELECT CONVERT(DATE, '2024-05-31') AS formatted_date;

이 SQL 문에서는 문자열 '2024-05-31'을 날짜형으로 변환하고 formatted_date로 표시합니다.

문자열에서 숫자로 변환

문자열 데이터를 숫자형으로 변환하는 예입니다:

SELECT CONVERT(INT, '12345') AS number_value;

이 SQL 문에서는 문자열 '12345'을 정수형으로 변환하고 number_value로 표시합니다.

스타일 옵션 사용

CONVERT 함수는 특정 데이터 유형에 대해 스타일 옵션을 제공할 수 있습니다. 특히 날짜형으로 변환할 때 스타일 옵션이 유용합니다.

예: 날짜의 스타일 지정

예를 들어, 문자열형 데이터를 특정 형식의 날짜로 변환하는 경우:

SELECT CONVERT(VARCHAR, GETDATE(), 23) AS formatted_date;

이 SQL 문에서는 현재 날짜와 시간을 스타일 23 (YYYY-MM-DD 형식)으로 문자열로 변환하고 formatted_date로 표시합니다.

CONVERT 함수 응용 예

CONVERT 함수는 특정 형식이나 스타일이 필요한 데이터 변환에 특히 유용합니다.

예: 통화 데이터 변환

예를 들어, 통화 데이터를 특정 형식으로 문자열로 변환하는 경우:

SELECT CONVERT(VARCHAR, CAST(12345.67 AS MONEY), 1) AS formatted_currency;

이 SQL 문에서는 숫자 데이터를 통화 형식으로 변환하고, 스타일 1 (쉼표가 포함된 통화 형식)으로 문자열로 변환하여 formatted_currency로 표시합니다.

CONVERT 함수 사용 시 주의사항

CONVERT 함수를 사용할 때는 변환할 원본 데이터와 변환할 대상 데이터 유형의 호환성을 확인하는 것이 중요합니다. 또한, 스타일 옵션을 사용할 경우 특정 스타일이 지원되는지 데이터베이스 문서를 확인하는 것이 좋습니다.

CONVERT 함수를 적절히 사용하면 유연하고 세부적인 데이터 변환을 수행할 수 있으며, 데이터의 일관성과 가독성을 유지할 수 있습니다.

실제 SQL 코드 예

여기서는 실제 SQL 코드를 사용하여 컬럼의 데이터 유형을 변경하고 데이터를 캐스트하는 방법을 구체적으로 보여줍니다. 이를 통해 이론뿐만 아니라 실질적인 방법도 배울 수 있습니다.

예1: VARCHAR에서 INT로 데이터 유형 변경 및 캐스트

먼저, VARCHAR형 컬럼을 INT형으로 변경하는 예를 보여드립니다.

-- 테이블 생성
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    age VARCHAR(3)
);

-- 데이터 삽입
INSERT INTO users (user_id, age)
VALUES (1, '25'), (2, '30'), (3, '45');

-- 컬럼의 데이터 유형을 변경하기 전에 데이터 확인
SELECT * FROM users;

-- 데이터 유형 변경을 위한 CAST 작업
UPDATE users
SET age = CAST(age AS INT);

-- 컬럼의 데이터 유형 변경
ALTER TABLE users
ALTER COLUMN age INT;

-- 변경 후 데이터 확인
SELECT * FROM users;

이 예에서는 먼저 users 테이블을 생성하고 VARCHAR형 age 컬럼이 있는 데이터를 삽입합니다. 그다음 age 컬럼의 데이터를 INT형으로 캐스트하고, 이후 ALTER TABLE 문을 사용하여 컬럼의 데이터 유형을 변경합니다.

예2: 문자열을 날짜형으로 변환

다음은 문자열형 데이터를 날짜형으로 변환하는 예입니다.

-- 테이블 생성
CREATE TABLE events (
    event_id INT PRIMARY KEY,
    event_date VARCHAR(10)
);

-- 데이터 삽입
INSERT INTO events (event_id, event_date)
VALUES (1, '2024-05-31'), (2, '2024-06-01'), (3, '2024-07-15');

-- 컬럼의 데이터 유형을 변경하기 전에 데이터 확인
SELECT * FROM events;

-- 데이터 유형 변경을 위한 CAST 작업
UPDATE events
SET event_date = CAST(event_date AS DATE);

-- 컬럼의 데이터 유형 변경
ALTER TABLE events
ALTER COLUMN event_date DATE;

-- 변경 후 데이터 확인
SELECT * FROM events;

이 예에서는 events 테이블을 생성하고 문자열형 event_date 컬럼이 있는 데이터를 삽입합니다. 그다음 event_date 컬럼의 데이터를 DATE형으로 캐스트하고, 이후 ALTER TABLE 문을 사용하여 컬럼의 데이터 유형을 변경합니다.

예3: 숫자를 문자열로 변환하여 결합

마지막으로, 숫자형 데이터를 문자열형으로 변환하여 다른 문자열과 결합하는 예입니다.

-- 테이블 생성
CREATE TABLE products (
    product_id INT PRIMARY KEY,
    price DECIMAL(10, 2)
);

-- 데이터 삽입
INSERT INTO products (product_id, price)
VALUES (1, 99.99), (2, 149.50), (3, 299.99);

-- 숫자를 문자열로 변환하여 결합
SELECT product_id, 'Price: ' + CAST(price AS VARCHAR(10)) AS price_label
FROM products;

이 예에서는 products 테이블을 생성하고 DECIMAL형 price 컬럼이 있는 데이터를 삽입합니다. 그다음 price 컬럼의 데이터를 VARCHAR형으로 캐스트하고 다른 문자열과 결합하여 새로운 컬럼 price_label로 표시합니다.

이러한 예를 통해 SQL에서 컬럼의 데이터 유형을 변경하고 데이터를 캐스트하는 구체적인 방법을 이해할 수 있습니다. 직접 연습을 통해 더 깊이 있는 이해를 얻을 수 있을 것입니다.

응용 예와 연습 문제

여기에서는 컬럼의 데이터 유형 변경과 데이터 캐스트의 응용 예를 몇 가지 소개하고, 이해를 높이기 위한 연습 문제를 제공합니다.

응용 예1: 여러 컬럼의 데이터 유형 변경

여러 컬럼의 데이터 유형을 변경할 경우, 개별 컬럼에 대해 ALTER COLUMN을 사용합니다.

-- 테이블 생성
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date VARCHAR(10),
    total_amount VARCHAR(10)
);

-- 데이터 삽입
INSERT INTO orders (order_id, order_date, total_amount)
VALUES (1, '2024-05-31', '150.50'), (2, '2024-06-01', '200.00'), (3, '2024-07-15', '99.99');

-- 데이터 유형 변경을 위한 CAST 작업
UPDATE orders
SET order_date = CAST(order_date AS DATE),
    total_amount = CAST(total_amount AS DECIMAL(10, 2));

-- 컬럼의 데이터 유형 변경
ALTER TABLE orders
ALTER COLUMN order_date DATE,
ALTER COLUMN total_amount DECIMAL(10, 2);

-- 변경 후 데이터 확인
SELECT * FROM orders;

이 예에서는 order_date를 문자열형에서 날짜형으로, total_amount를 문자열형에서 소수형으로 변경하고 있습니다.

응용 예2: CASE 문과 CAST의 조합

CASE 문을 사용하여 특정 조건에 따라 데이터 유형을 캐스트하는 방법입니다.

-- 테이블 생성
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    salary VARCHAR(10)
);

-- 데이터 삽입
INSERT INTO employees (employee_id, salary)
VALUES (1, '50000'), (2, '60000'), (3, '70K');

-- 조건에 따른 데이터 유형 캐스트
SELECT employee_id,
       CASE
           WHEN ISNUMERIC(salary) = 1 THEN CAST(salary AS INT)
           ELSE NULL
       END AS salary_int
FROM employees;

이 예에서는 salary 컬럼의 데이터가 숫자인 경우에만 INT형으로 캐스트하며, 그렇지 않은 경우에는 NULL을 반환합니다.

연습 문제

다음 연습 문제에 도전해 보세요.

문제1: 데이터 유형 변경 및 캐스트

테이블 students가 있으며, 다음 컬럼을 가지고 있습니다:

  • student_id (INT)
  • birthdate (VARCHAR(10))
  • score (VARCHAR(5))

이 테이블의 데이터 유형을 다음과 같이 변경하세요:

  • birthdate를 DATE형으로 변경
  • score를 FLOAT형으로 변경

변경 후 데이터를 확인하는 SQL 문을 작성하세요.

문제2: CASE 문과 CAST의 조합

테이블 products가 있으며, 다음 컬럼을 가지고 있습니다:

  • product_id (INT)
  • price (VARCHAR(10))

price 컬럼의 데이터가 정수인 경우에는 INT형으로, 소수인 경우에는 FLOAT형으로 캐스트하여 새로운 컬럼 price_cast로 표시하는 SQL 문을 작성하세요.

이 연습 문제를 통해 컬럼의 데이터 유형 변경과 데이터 캐스트의 이해를 높이고, 실용적인 스킬을 향상시켜 보세요.

요약

SQL에서 컬럼의 데이터 유형을 변경하고 데이터를 캐스트하는 방법에 대해 배웠습니다. ALTER TABLE 문을 사용한 기본적인 데이터 유형 변경 절차부터, CAST 함수와 CONVERT 함수를 사용한 구체적인 데이터 캐스트 방법까지 다양한 예시를 통해 이해를 깊게 할 수 있었습니다. 또한, 여러 컬럼의 변경이나 CASE 문을 사용한 응용 예, 연습 문제를 통해 실질적인 스킬을 연마할 기회도 제공했습니다.

데이터 유형의 변경은 데이터의 일관성을 유지하면서 데이터베이스를 효율적으로 운영하는 데 중요한 스킬입니다. 이러한 방법을 적절히 사용함으로써 데이터베이스의 유연성과 성능을 향상시킬 수 있습니다. 일상적인 데이터베이스 관리 및 개발 작업에 유용하게 활용하시기 바랍니다.

목차