시스템

mysql 에서 필드가 숫자인지 확인하는 쿼리

네오류이 2025. 9. 25. 13:10
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형

MySQL에서 필드가 숫자인지 확인하는 방법은 몇 가지가 있어!

필드 타입 확인하기

필드의 데이터 타입을 확인하려면 information_schema.COLUMNS 테이블을 사용할 수 있어:

sql

SELECT DATA_TYPE 
FROM information_schema.COLUMNS 
WHERE TABLE_NAME='테이블명' AND COLUMN_NAME='컬럼명';

이 쿼리는 해당 컬럼의 데이터 타입(varchar, int 등)을 보여줄 거야 

더 자세한 타입 정보를 보려면:

sql

SELECT COLUMN_TYPE 
FROM information_schema.COLUMNS 
WHERE TABLE_NAME='테이블명' AND COLUMN_NAME='컬럼명';

이렇게 하면 int(11), varchar(255) 같은 형식으로 더 상세한 정보가 나와 

데이터 값이 숫자인지 확인하기

특정 컬럼의 데이터가 실제로 숫자인지 확인하려면 REGEXP를 사용할 수 있어:

sql

SELECT * FROM 테이블명 
WHERE 컬럼명 REGEXP '^[0-9]+$';

이 쿼리는 해당 컬럼의 값이 숫자로만 이루어진 행들을 찾아줘 

반대로 숫자가 아닌 데이터를 찾고 싶다면:

sql

SELECT * FROM 테이블명 
WHERE 컬럼명 NOT REGEXP '^[0-9]+$';

숫자형 데이터 타입

참고로 MySQL의 숫자형 데이터 타입은 다음과 같이 있어:

  • TINYINT: -128 ~ 127 (UNSIGNED: 0 ~ 255)
  • SMALLINT: -32,768 ~ 32,767 (UNSIGNED: 0 ~ 65,535)
  • MEDIUMINT: -8,388,608 ~ 8,388,607 (UNSIGNED: 0 ~ 16,777,215)
  • INT: -2,147,483,648 ~ 2,147,483,647 (UNSIGNED: 0 ~ 4,294,967,295)
  • BIGINT: 매우 큰 범위의 정수 

필요에 따라 적절한 타입을 선택하면 좋을 것 같아!

 

 

mysql  에서 데이터 값이 숫자만 뽑아내고 싶어

 

안녕 류이~ MySQL에서 데이터 값이 숫자인 것만 뽑아내고 싶구나! 몇 가지 방법을 알려줄게.

숫자만 있는 데이터 찾기

sql

SELECT * FROM 테이블명 
WHERE 컬럼명 REGEXP '^[0-9]+$';

이 쿼리는 해당 컬럼의 값이 숫자로만 이루어진 행들을 찾아줘 

문자열에서 숫자만 추출하기

만약 문자열 안에 있는 숫자만 추출하고 싶다면:

sql

SELECT 
  원본컬럼,
  REGEXP_REPLACE(원본컬럼, '[^0-9]', '') AS 숫자만추출
FROM 테이블명;

이렇게 하면 '주문번호 20210708000032 결제'에서 '20210708000032'처럼 숫자만 추출할 수 있어 

응용 예시

특정 조건을 추가하고 싶다면:

sql

-- 숫자로만 구성된 데이터 중 특정 길이(예: 10자리)인 것만 찾기
SELECT * FROM 테이블명 
WHERE 컬럼명 REGEXP '^[0-9]{10}$';

-- 숫자로 시작하는 데이터 찾기
SELECT * FROM 테이블명 
WHERE 컬럼명 REGEXP '^[0-9]';

데이터베이스 문제 해결하는 데 도움이 필요하면 언제든 물어봐! 지난번에 데이터가 하루 지나면 원래 값으로 변경되는 문제도 같이 해결해볼 수 있을 것 같아.

 

함수로는 없어? 저건 정규식인데 isnumeric 같은 함수

 

MySQL에는 안타깝게도 SQL Server처럼 ISNUMERIC()이라는 내장 함수가 없어 . SQL Server에서는 ISNUMERIC 함수로 문자열이 숫자 형식인지 확인할 수 있는데, MySQL에서는 그런 함수가 기본 제공되지 않아 .

하지만 직접 함수를 만들어서 사용할 수는 있어! 이런 식으로:

sql

CREATE FUNCTION isNumber(inputValue VARCHAR(255)) 
RETURNS TINYINT
DETERMINISTIC
BEGIN
    DECLARE result TINYINT DEFAULT 0;
    
    IF inputValue REGEXP '^[0-9]+$' THEN
        SET result = 1;
    END IF;
    
    RETURN result;
END

이 함수를 만들어두면 이렇게 사용할 수 있어:

sql

SELECT * FROM 테이블명 WHERE isNumber(컬럼명) = 1;

이렇게 하면 숫자만 있는 데이터를 쉽게 찾을 수 있을 거야  .

더 복잡한 숫자 체크(소수점이 있는 경우 등)가 필요하면 정규식을 조금 수정해서:

sql

CREATE FUNCTION isNumber(inputValue VARCHAR(255)) 
RETURNS TINYINT
DETERMINISTIC
BEGIN
    RETURN inputValue REGEXP '^-?[0-9]*.?[0-9]+$';
END

이런 식으로 만들 수도 있어  .

 

 

 

728x90
반응형