Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SELECT 문에서 UNSIGNED INT에 -1을 곱하는 방법

MySQL에서 UNSIGNED INT 타입의 컬럼 값에 -1을 곱하면 "BIGINT UNSIGNED value is out of range"와 같은 범위 초과 오류가 발생할 수 있습니다. 이는 UNSIGNED 타입이 음수를 저장할 수 없기 때문입니다. 이 문제는 CAST() 함수를 사용해 연산 결과를 SIGNED 타입으로 변환하면 간단히 해결할 수 있습니다. 아래 예제를 통해 자세히 알아보겠습니다.

1. 테이블 생성하기

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Value int
-> );
Query OK, 0 rows affected (0.80 sec)

2. 데이터 삽입하기

INSERT 명령을 사용해 테이블에 샘플 레코드를 추가합니다.

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.12 sec)

mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+-------+
| Value |
+-------+
| 10 |
| 20 |
| 100 |
+-------+
3 rows in set (0.00 sec)

4. UNSIGNED INT에 -1 곱하기

이제 핵심 부분입니다. CAST(Value * -1 AS SIGNED)를 사용하면 UNSIGNED 값에 -1을 곱한 결과를 오류 없이 음수로 얻을 수 있습니다.

mysql> select cast(Value*-1 as signed) from DemoTable;

실행 결과는 다음과 같습니다.

+--------------------------+
| cast(Value*-1 as signed) |
+--------------------------+
| -10 |
| -20 |
| -100 |
+--------------------------+
3 rows in set (0.00 sec)

정리

UNSIGNED INT 컬럼에 -1을 직접 곱하면 범위 초과 오류가 발생하지만, CAST(컬럼 * -1 AS SIGNED) 형태로 작성하면 연산 결과가 부호 있는 정수로 변환되어 정상적으로 음수 값을 반환받을 수 있습니다. 이 기법은 재고 차감, 잔액 계산 등 음수 연산이 필요한 상황에서 유용하게 활용됩니다.