programing

SQL Server : 문자열에 숫자 문자만 있는지 테스트하는 방법

css3 2023. 9. 27. 18:06

SQL Server : 문자열에 숫자 문자만 있는지 테스트하는 방법

저는 SQL Server 2008에서 일하고 있습니다.문자열(varchar)에 숫자 문자(0-9)만 있는지 테스트하려고 합니다.저는 IS_NUMBERIC 함수가 거짓 결과를 줄 수 있다는 것을 알고 있습니다.(나의 데이터에는 $s 기호가 있을 수 있으며, 이 기호는 테스트를 통과하지 않아야 합니다.)그래서 저는 그 기능을 피하고 있습니다.

문자열에 숫자가 아닌 문자가 있는지 확인하는 테스트가 이미 있습니다.

some_column LIKE '%[^0123456789]%'

나는 유일한 숫자 테스트가 비슷한 것이 될 것이라고 생각하지만, 나는 빈칸을 그리고 있습니다.무슨 생각 있어요?

사용하다Not Like

where some_column NOT LIKE '%[^0-9]%'

데모

declare @str varchar(50)='50'--'asdarew345'

select 1 where @str NOT LIKE '%[^0-9]%'

SQL 2008 이상용 ISNUMERIC이라는 시스템 기능이 있습니다.예:

SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;

몇 가지 간단한 테스트를 해보고 문서도 자세히 조사했습니다.

ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.

그 말은 예를 들어 꽤 예측이 가능하다는 뜻입니다.

-9879210433지나가지만987921-0433하지 않다.$9879210433지나가지만9879210$433하지 않다.

따라서 이 정보를 사용하여 유효한 통화 기호 목록을 기반으로 제거할 수 있습니다.+&-성격.

해결책:where some_column NOT LIKE '%[^0-9]%'맞아요.

단 한 가지 중요한 사항:문자열 열 =에 대한 유효성 검사 추가''(빈 문자열).이 시나리오는 다음과 같이 돌아올 것입니다.''역시 유효한 숫자입니다.

효과가 있는 방법.위에서 사용하는 방식으로는 작동하지 않습니다.

declare @str varchar(50)='79136'

select 
  case 
    when  @str LIKE replicate('[0-9]',LEN(@str)) then 1 
    else 0 
  end

declare @str2 varchar(50)='79D136'

select 
  case 
    when  @str2 LIKE replicate('[0-9]',LEN(@str)) then 1 
    else 0 
  end
DECLARE @x int=1
declare @exit bit=1
WHILE @x<=len('123c') AND @exit=1
BEGIN
IF ascii(SUBSTRING('123c',@x,1)) BETWEEN 48 AND 57
BEGIN
set @x=@x+1
END
ELSE
BEGIN
SET @exit=0
PRINT 'string is not all numeric  -:('
END
END

숫자만 있는 문자열을 찾으려고 했는데 구두점이나 다른 것은 없습니다.저는 마침내 여기서 통할 만한 답을 찾았습니다.

PATINDEX('%[^0-9]%', some_column) = 0을 사용하면 실제 숫자 문자열을 제외한 모든 것을 필터링할 수 있습니다.

선택한 답변이 작동하지 않습니다.

declare @str varchar(50)='79D136'
select 1 where @str NOT LIKE '%[^0-9]%'

해결책은 없지만 이 잠재적인 함정에 대해 알고 있습니다.과학적 표기인 'E'에 'D'자를 대입해도 마찬가지입니다.

효과가 있어요!!!

SELECT my_field FROM my_table WHERE REGEXP_LIKE(my_field, '[^0-9]') - only with char
 SELECT my_field FROM my_table WHERE REGEXP_LIKE(my_field, '[0-9]') - only numbers

언급URL : https://stackoverflow.com/questions/28370295/sql-server-how-to-test-if-a-string-has-only-digit-characters