반응형
반응형

이전에 ISNUMERIC 함수가 거시기한 것 같아 이 함수 관련해서 적어놓은 것이 있었는데
어디로 갔는지 찾을 수가 없어 헤메다가 아래와 같은 글을 발견하게 되어 다시 스크랩해놓는다..-_-;


블로그를 돌아다니다가, ISNUMERIC 함수와 관련된 사항이 있어서 글 올립니다..
 
ISNUMERIC  함수는 해당 값이 숫자인지를 판단하는데 이용하는 함수로, 저의 경우 자주 이용했던 함수입니다.
 
그런데~~ 문제가 있을 수 있는 경우가 있습니다..
 
다음 예제를 보시지요..
 

DECLARE @S VARCHAR(50)

SET @S = CHAR(9) --- CHAR(9) TAB

SELECT ISNUMERIC(@S), ISNUMERIC(CHAR(9)),ISNUMERIC('1D2'),ISNUMERIC('D')

GO

 

 

TAB 문자인 CHAR(9)를 숫자 맞다고 하지 않나, 또 '1D2'를 숫자가 맞다라고 하지 않나.. ㅡ,.ㅡ

 

 

또 다른 예제를 보겠습니다.

 

CREATE TABLE #foo (Value VARCHAR(20))

GO

 

INSERT INTO #foo

             SELECT '1' UNION ALL

             SELECT '3' UNION ALL

             SELECT 'B' UNION ALL

             SELECT '2' UNION ALL

             SELECT '33.331' UNION ALL

             SELECT 'adad1' UNION ALL

             SELECT '1d2' UNION ALL

             SELECT '^' UNION ALL

             SELECT '17777.999'

GO

 

임시 테이블을 하나 만들어 값들을 마구 넣습니다.

 

 

-- ^ 이출력

SELECT * FROM #foo

WHERE Value NOT LIKE '%[a-z]%'

GO

 

 

-- 1d2 가출력

SELECT * FROM #foo

WHERE ISNUMERIC(Value) = 1

GO

 

 

-- 올바른결과가출력

SELECT * FROM #foo

WHERE Value NOT LIKE '%[a-z]%'

AND ISNUMERIC(Value) = 1

GO

 

 

 

결론 ) ISNUMERIC 함수를 쓸 때~!! 주의합시다..( NOT LIKE '%[a-z]%' 등과 같은 조건을 같이 붙이면서..)

 
 
 
석이 123,2 이것도 숫자라고 나옵니다. 이넘 믿을넘이 못되는거 같아요....
2006/06/29
석이
ISNUMERIC returns 1 when the input expression evaluates to a valid integer, floating point number, money or decimal type; otherwise it returns 0. A return value of 1 guarantees that expression can be converted to one of these numeric types.

정의의 관점에서 이상이 없습니다. 단지 정의를 잘 몰랐던 ^^

declare
@iV1 varchar(10)
,@iV2 varchar(10)
,@iV3 varchar(10)

select @iV1 = '1d10', @iV2 = '1e10', @iV3 ='1,222,111'
select cast (@iv1 as float), cast(@iv2 as float) ,cast( @iv3 as money)
2006/07/30
반응형

+ Recent posts

반응형