복붙노트

[SQL] 연산자와 같은 SQL 숫자 만 얻을 수

SQL

연산자와 같은 SQL 숫자 만 얻을 수

이것은 내가 간단한 문제가 아직 해결을 못하고 생각입니다. 나는 여기에 설명 된대로 만 열에서 유효 숫자를 좀하고 싶습니다.

우리는 다음과 같은 값으로 VARCHAR 컬럼이 있다고 가정하자

ABC
Italy
Apple
234.62
2:234:43:22
France
6435.23
2
Lions

여기에서 문제는 번호를 선택하는 것입니다

여기서 대답은 '% [0-9] %'처럼 TBL에서 *를 선택는하지만 수익을했을 것

    234.62
    2:234:43:22
    6435.23
    2

여기서, 물론, 2 : 234 : 43 :이 유효 숫자가 아니므로 (22)는 바람직하지 않다.

원하는 결과는

        234.62
        6435.23
        2

이 작업을 수행 할 수있는 방법이 있나요?

해결법

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

    1.이 시도 할 수 있습니다

    이 시도 할 수 있습니다

    ISNUMERIC (Transact-SQL)를 참조하십시오

    DECLARE @Table TABLE(
            Col VARCHAR(50)
    )
    
    INSERT INTO @Table SELECT 'ABC' 
    INSERT INTO @Table SELECT 'Italy' 
    INSERT INTO @Table SELECT 'Apple' 
    INSERT INTO @Table SELECT '234.62' 
    INSERT INTO @Table SELECT '2:234:43:22' 
    INSERT INTO @Table SELECT 'France' 
    INSERT INTO @Table SELECT '6435.23'
    INSERT INTO @Table SELECT '2' 
    INSERT INTO @Table SELECT 'Lions'
    
    SELECT  *
    FROM    @Table
    WHERE   ISNUMERIC(Col) = 1
    
  2. ==============================

    2.유효한 문자를 포함하려면 다음을 사용할 수 있습니다 :

    유효한 문자를 포함하려면 다음을 사용할 수 있습니다 :

    SQL

    SELECT * FROM @Table
    WHERE Col NOT LIKE '%[^0-9.]%'
    

    결과

    Col
    ---------
    234.62
    6435.23
    2
    
  3. ==============================

    3.이 같은 시도 - 당신이 언급 한 경우에 작동합니다.

    이 같은 시도 - 당신이 언급 한 경우에 작동합니다.

    select * from tbl
    where answer like '%[0-9]%'
    and answer not like '%[:]%'
    and answer not like '%[A-Z]%'
    
  4. ==============================

    4.SQL 2012 및 이후 버전에서는 숫자 유형, 예를 들어,로 변환하려고 TRY_CAST / TRY_CONVERT을 사용할 수 있습니다 TRY_CAST (플로트 AS 대답은) NULL이 아닌 -이 너무 과학적 표기법과 일치하는 것이다 불구하고 주 (1 + E34). (당신은 소수를 사용하는 경우, 과학 표기법이 일치하지 않습니다)

    SQL 2012 및 이후 버전에서는 숫자 유형, 예를 들어,로 변환하려고 TRY_CAST / TRY_CONVERT을 사용할 수 있습니다 TRY_CAST (플로트 AS 대답은) NULL이 아닌 -이 너무 과학적 표기법과 일치하는 것이다 불구하고 주 (1 + E34). (당신은 소수를 사용하는 경우, 과학 표기법이 일치하지 않습니다)

  5. ==============================

    5.당신이 일반 SQL92에서 원하는 위치를 얻을 수 있습니다 무엇을 :

    당신이 일반 SQL92에서 원하는 위치를 얻을 수 있습니다 무엇을 :

    select * from tbl where lower(answer) = upper(answer)
    

    또는, 경우에 당신은 또한 / 후행 공백을 선도하기위한 강력한되고 싶어 :

    select * from tbl where lower(answer) = trim(upper(answer))
    
  6. from https://stackoverflow.com/questions/2032742/sql-like-operator-to-get-the-numbers-only by cc-by-sa and MIT license