PATINDEX
와 ISNUMERIC
함수는 SQL Server에서 문자열을 숫자로 확인할 때 사용되는 함수이지만, 두 함수는 다른 방식으로 작동하며, 이에 따라 결과도 다를 수 있습니다.
PATINDEX('%[^0-9]%', @PNR) = 0
PATINDEX
함수는 특정 패턴을 문자열 내에서 검색하는 함수입니다.'%[^0-9]%'
는 숫자가 아닌 문자(0-9를 제외한 모든 문자)를 찾는 정규 표현식입니다.PATINDEX('%[^0-9]%', @PNR)
이 0을 반환하면, 이는 @PNR에 숫자가 아닌 문자가 없음을 의미합니다.- 따라서,
IF PATINDEX('%[^0-9]%', @PNR) = 0
은 @PNR이 순수하게 숫자로만 이루어진 문자열인지 확인합니다.
ISNUMERIC(@PNR) = 1
ISNUMERIC
함수는 문자열이 숫자로 변환 가능한지를 확인합니다.ISNUMERIC
함수는 더 넓은 범위의 숫자 형식을 허용합니다. 이는 단순히 0-9의 숫자뿐만 아니라, 부동 소수점 숫자, 통화 기호, 지수 표기법 등을 포함할 수 있습니다.- 따라서,
ISNUMERIC(@PNR) = 1
은 @PNR이 숫자로 변환 가능한지 확인하지만, 이는 꼭 순수한 숫자(0-9)로만 이루어졌다는 것을 의미하지는 않습니다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
sql코드 복사<code>DECLARE @PNR VARCHAR(50) -- 예제 1: 순수 숫자 SET @PNR = '12345' IF PATINDEX('%[^0-9]%', @PNR) = 0 PRINT '@PNR는 순수한 숫자입니다.' ELSE PRINT '@PNR는 숫자가 아닌 문자를 포함하고 있습니다.' IF ISNUMERIC(@PNR) = 1 PRINT '@PNR는 숫자로 변환 가능합니다.' ELSE PRINT '@PNR는 숫자로 변환 불가능합니다.' -- 예제 2: 부동 소수점 SET @PNR = '123.45' IF PATINDEX('%[^0-9]%', @PNR) = 0 PRINT '@PNR는 순수한 숫자입니다.' ELSE PRINT '@PNR는 숫자가 아닌 문자를 포함하고 있습니다.' IF ISNUMERIC(@PNR) = 1 PRINT '@PNR는 숫자로 변환 가능합니다.' ELSE PRINT '@PNR는 숫자로 변환 불가능합니다.' -- 예제 3: 통화 기호 SET @PNR = '$12345' IF PATINDEX('%[^0-9]%', @PNR) = 0 PRINT '@PNR는 순수한 숫자입니다.' ELSE PRINT '@PNR는 숫자가 아닌 문자를 포함하고 있습니다.' IF ISNUMERIC(@PNR) = 1 PRINT '@PNR는 숫자로 변환 가능합니다.' ELSE PRINT '@PNR는 숫자로 변환 불가능합니다.' |
결과
- 순수 숫자:
PATINDEX
와ISNUMERIC
모두 참으로 평가됩니다. - 부동 소수점:
PATINDEX
는 거짓,ISNUMERIC
은 참으로 평가됩니다. - 통화 기호:
PATINDEX
는 거짓,ISNUMERIC
은 참으로 평가됩니다.
따라서, PATINDEX
는 문자열이 순수하게 숫자(0-9)로만 이루어졌는지 확인할 때 사용되고, ISNUMERIC
은 문자열이 숫자로 변환 가능한지를 보다 넓은 범위에서 확인할 때 사용됩니다.
PATINDEX 한글로 직역하면ChatGPT
PATINDEX
함수의 한글 직역은 “패턴 인덱스”입니다. 조금 더 설명을 덧붙이면, PATINDEX
함수는 특정 패턴이 문자열 내에서 처음 나타나는 위치를 반환하는 함수입니다. SQL Server에서 사용되는 이 함수는 문자열 검색과 패턴 매칭에 유용합니다.
예를 들어, “PATINDEX(‘%abc%’, ‘abcde’)”은 문자열 “abcde”에서 “abc”라는 패턴이 처음 나타나는 위치를 반환합니다.
따라서, PATINDEX
함수는 “패턴 인덱스”라고 직역할 수 있습니다.