MSSQL 2008 기준으로 숫자만 판별하는 방법 문의드립니다!!! 0 1 1,242

by 에베베베 [SQLServer] [2022.09.27 13:43:30]


안녕하세요. MSSQL 에서 특정 컬럼을 조회하려고 하는데 해당 컬럼은 VARCHAR 형식으로 되어있습니다.

이 데이터 중 숫자인 Row 만 추려내고 싶은데요.

일단 내장함수인 ISNUMERIC 의 경우 ".", "-" 등을 모두 숫자로 인식하여 사용이 불가하고..

사용자정의 함수를 만들어 함수 안에서 프로시저를 호출하여 프로시저에서 해당 값을 CAST 처리해보고 TRY CATCH 구문으로 판별하려고 시도해봤습니다만

사용자정의 함수에서는 프로시저 호출이 안된다는걸 찾게되었습니다.

혹시 다른 방법이 있을지 궁금합니다!!

아래는 제가 시도했던 함수 및 프로시저 소스입니다.

CREATE PROCEDURE [dbo].[TRY_CAST]
(
    @value VARCHAR(38)
)
AS 
BEGIN
SET NOCOUNT ON 
    BEGIN TRY
        SELECT CAST(@value AS DECIMAL)
    END TRY
    BEGIN CATCH
        RETURN(0)
    END CATCH
    RETURN(1)
SET NOCOUNT OFF
END

;

CREATE FUNCTION dbo.TRY_TEST
(   
    @input VARCHAR(64)
)
RETURNS INT
AS
BEGIN    
    DECLARE @return INT
    EXECUTE @return = BrBase.dbo.TRY_CAST
            @value = @input
    RETURN(@return)    
END

 

 

by 마농 [2022.09.27 14:57:59]

1. 함수안에서 바로 cast 하면 되지 굳이 프로시져를 호출할 필요가 없어 보입니다.
2. ISNUMERIC 의 문제점을 알고 있다면 그 부분만 보완해서 사용해도 될 듯 합니다.

WITH t AS
(
SELECT 'abc' v
UNION ALL SELECT '1'
UNION ALL SELECT '1.2'
UNION ALL SELECT '-1'
UNION ALL SELECT '-'
UNION ALL SELECT '.'
UNION ALL SELECT '1-'
UNION ALL SELECT '1,200'
)
SELECT v
  FROM t
 WHERE ISNUMERIC(v) = 1
   AND v NOT IN ('-', '.')
   AND v NOT LIKE ('%,%')
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입