PostgreSQL 숫자체크 함수 만들기

대상 문자열 값이 숫자인지 아닌지 체크해야하는 경우가 있습니다.

숫자인지 아닌지 체크를 하는 로직을 만들어 보겠습니다.

로직은 FUNCTION 으로 만들어서 공통으로 사용할 수 있게 하겠습니다.

 

숫자 체크 함수

문자열 값이 숫자인지 체크하는 함수를 만들 기위해 CAST를 사용하겠습니다.

CAST는 데이터 타입을 변경해주는 함수입니다.

샘플 함수를 만들어 보겠습니다.

CREATE OR REPLACE FUNCTION isnumeric(c_num character varying)
  RETURNS boolean AS
$BODY$
declare
 
	n_result 		numeric;  -- 임시 저장 변수
	
BEGIN

    -- 데이터 타입을 숫자로 변환
	select cast(c_num as numeric) into n_result;

	-- 숫자 타입으로 정상으로 변환되었으면 true를 반환
	return TRUE;
	
    -- 데이터 타입 변환중 에러가 발생하면 EXCEPTION에서 처리
	EXCEPTION
	WHEN OTHERS THEN
	-- 변환 처리중 에러 발생하는 false를 반환
	return FALSE;
 
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

 

작성한 함수 이름은 IsNumeric 입니다.

IsNumeric(문자열)

true – 숫자

false – 숫자가 아닌 문자열

 

반환값으로는 true 또는 false를 반환합니다.

문자열 값이 숫자이면은 true를 반환합니다.

숫자값이 아닌 경우에는 false를 반환합니다.

 

소스를 간단하게 살펴보면 파라미터로 문자열을 받습니다.

받은 문자열을 CAST함수를 사용해 숫자 타입으로 형변환을 합니다.

숫자로 형변환을 할때 숫자가 아닌 다른 값이 포함되어 있으면 에러가 발생되면서 EXCEPTION으로 빠지게 됩니다.

문자열 값에 숫자만 있는 경우에는 CAST로 형변환이 되기 때문에 true를 반환합니다.

즉, CAST를 사용해 숫자로 형변환을 시켜서 문제없이 숫자 타입으로 형변환이 되는지 해보는 로직입니다.

CAST함수의 자세한 사용 방법은 아래를 참조해주세요.

 

 

작성한 함수를 테스트해보겠습니다.

SELECT ISNUMERIC('123456'); -- true
 isnumeric
-----------
 t
(1 row)

SELECT ISNUMERIC('abcdef'); -- false
 isnumeric
-----------
 f
(1 row)

SELECT ISNUMERIC('123abc'); -- false
 isnumeric
-----------
 f
(1 row)

SELECT ISNUMERIC('abc123'); -- false
 isnumeric
-----------
 f
(1 row)

 

문자열에 숫자만 있는 값은 true가 반환되었습니다.

문자열에 숫자외에 값이 포함되어 있는 경우에는 false가 반환되었습니다.

댓글