안녕하세요. 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
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 ('%,%') ;