복붙노트

[SQL] SQL Server의 IsInteger위한 최고의 상응

SQL

SQL Server의 IsInteger위한 최고의 상응

필드의 값이 (2000/2005/2008) SQL Server의 정수 여부를 결정하는 가장 좋은 방법은 무엇입니까?

가능성 정수로 변환 할 것입니다 다양한 형식에 대한 사실 ISNUMERIC으로 돌아갑니다. 예를 들면 '15, 000 '및 '15 .1'을 포함한다.

당신은 문처럼 사용할 수 있지만, 단지 잘 자리의 미리 정해진 번호가 필드 작업에 나타납니다 ...

select * where zipcode like '[0-9][0-9][0-9][0-9][0-9]'

나는 시도 try / catch 블록 내에서의 int에 VARCHAR 매개 변수를 변환하는 사용자 정의 함수를 쓸 수 있지만, 나는 누군가가이 목표를 달성하기 위해 어떤 succient 방법을 가로 질러왔다 있는지 확인하기 위해 지역 사회와 함께 확인 해요 - 바람직 할 수 다른 객체를 생성하지 않고 SQL 구문의 where 절 내에서 사용할 수.

해결법

  1. ==============================

    1.한 접근법은

    한 접근법은

    zipcode NOT LIKE '%[^0-9]%'
    

    더블 네거티브, 그들을 '사랑에 도착!

  2. ==============================

    2.핸들의 부정적인 늦은 항목

    핸들의 부정적인 늦은 항목

    ISNUMERIC(zipcode + '.0e0') --integer
    ISNUMERIC(zipcode + 'e0')  --decimal
    

    보기를 참조하십시오

  3. ==============================

    3.SQL 서버 2005 +, 내가 CLR을 활성화하고 지원 정규 표현식에에 함수를 만드는 것입니다. SQL 서버 2000의 경우, 같은 일을하기 위해 UDF를 작성하는이 문서를 참조하십시오.

    SQL 서버 2005 +, 내가 CLR을 활성화하고 지원 정규 표현식에에 함수를 만드는 것입니다. SQL 서버 2000의 경우, 같은 일을하기 위해 UDF를 작성하는이 문서를 참조하십시오.

    ^ \ D {5} $ : 그럼 정규식을 사용하십시오

  4. ==============================

    4.이 표현은 정수 값과 다르게 0 1 범

    이 표현은 정수 값과 다르게 0 1 범

    floor((floor(abs(zipcode)))/abs(zipcode))
    
  5. ==============================

    5.왜 그냥 다음을 사용할 수 있습니까? 나는 실패 어떤 경우를 찾아 볼 수 없습니다.

    왜 그냥 다음을 사용할 수 있습니까? 나는 실패 어떤 경우를 찾아 볼 수 없습니다.

    DECLARE @TestValue nvarchar(MAX)
    SET @TestValue = '1.04343234e5'
    
    SELECT CASE WHEN ISNUMERIC(@TestValue) = 1
            THEN CASE WHEN ROUND(@TestValue,0,1) = @TestValue
                THEN 1
                ELSE 0
                END
            ELSE null
            END AS Analysis
    
  6. ==============================

    6.나는 다른 StackO 질문에이에 대한 완벽한 답을 내놓았다. 또한 한 사용자가 여기에 제안처럼 당신이 ".0e0"를 사용할 수 없습니다 증명한다. 그것은 CLR 또는 비 스칼라 함수없이 그렇게한다. 그것을 확인하시기 바랍니다 : https://stackoverflow.com/a/10645764/555798

    나는 다른 StackO 질문에이에 대한 완벽한 답을 내놓았다. 또한 한 사용자가 여기에 제안처럼 당신이 ".0e0"를 사용할 수 없습니다 증명한다. 그것은 CLR 또는 비 스칼라 함수없이 그렇게한다. 그것을 확인하시기 바랍니다 : https://stackoverflow.com/a/10645764/555798

  7. ==============================

    7.2008 SQL로 이동 한 후, 나는 고민했다 ISNUMERIC ( '\ 8')가 true를 반환하지만 정수로 캐스팅 할 때 오류를 던지고. 분명히 슬래시 엔 원에 유효한 통화가 - (참조 http://www.louiebao.net/blog/200910/isnumeric/)

    2008 SQL로 이동 한 후, 나는 고민했다 ISNUMERIC ( '\ 8')가 true를 반환하지만 정수로 캐스팅 할 때 오류를 던지고. 분명히 슬래시 엔 원에 유효한 통화가 - (참조 http://www.louiebao.net/blog/200910/isnumeric/)

    내 솔루션이었다

    case when ISNUMERIC(@str) > 0 and not rtrim(@str) LIKE '[^0-9]%'  and not rtrim(@str) LIKE '%[^0-9]' and not rtrim(@str) LIKE '[^0-9]%' then rtrim(@str) else null end
    
  8. ==============================

    8.

    CREATE TABLE MY_TABLE(MY_FIELD VARCHAR(50))
    INSERT INTO MY_TABLE
    VALUES('9.123'),('1234567'),('9'),('2147483647'),('2147483647.01'),('2147483648'), ('2147483648ABCD'),('214,7483,648')
    
    SELECT *
    FROM MY_TABLE
    WHERE CHARINDEX('.',MY_FIELD) = 0 AND CHARINDEX(',',MY_FIELD) = 0       
    AND ISNUMERIC(MY_FIELD) = 1 AND CONVERT(FLOAT,MY_FIELD) / 2147483647 <= 1
    DROP TABLE MY_TABLE
    
  9. ==============================

    9.나는 Case 문을 사용했다 : 전송 (케이스 수량 / [# 일] = 전송 (수량 / [# 일이어서로서 INT (수량 / [# 일]) 그렇지 0 엔드 ABS) 정수)

    나는 Case 문을 사용했다 : 전송 (케이스 수량 / [# 일] = 전송 (수량 / [# 일이어서로서 INT (수량 / [# 일]) 그렇지 0 엔드 ABS) 정수)

  10. ==============================

    10.시험에 대한 입력 값은 정수 또는 우리는 SQL 서버의 SQL_VARIANT_PROPERTY 기능을 사용할 수 있습니다 여부.

    시험에 대한 입력 값은 정수 또는 우리는 SQL 서버의 SQL_VARIANT_PROPERTY 기능을 사용할 수 있습니다 여부.

    다음 SQL 스크립트 입력을하고 데이터 유형은 정수로 밝혀 여부를 테스트합니다

    declare @convertedTempValue bigint, @inputValue nvarchar(255) = '1' --Change '1' to any input value
    set @convertedTempValue = TRY_PARSE(@inputValue as bigint) --we trying to convert to bigint
    declare @var3 nvarchar(255) = cast (SQL_VARIANT_PROPERTY(@convertedTempValue,'BaseType') as nvarchar(255)) --we using SQL_VARIANT_PROPERTY to find out datatype
    if ( @var3 like '%int%')
        begin
        print 'value is integer'
        end
    else
        begin
        print 'value is non integer'
        end
    go
    
  11. ==============================

    11.어쩌면 당신은 정수 데이터 유형의 데이터를 정수 저장해야합니다.

    어쩌면 당신은 정수 데이터 유형의 데이터를 정수 저장해야합니다.

  12. from https://stackoverflow.com/questions/2358147/best-equivalent-for-isinteger-in-sql-server by cc-by-sa and MIT license