복붙노트

[SQL] SQL은 - 어떻게 소수점 이하 숫자 만받을 수 있나요?

SQL

SQL은 - 어떻게 소수점 이하 숫자 만받을 수 있나요?

어떻게 소수점 이하 숫자 만받을 수 있나요?

실시 예 : 2.938 = 938

해결법

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

    1.한 가지 방법, 음의 값도 작동

    한 가지 방법, 음의 값도 작동

    declare @1 decimal(4,3)
    select @1 = 2.938
    
    select PARSENAME(@1,1)
    
  2. ==============================

    2.이 시도:

    이 시도:

    SELECT (num % 1)
    
  3. ==============================

    3.당신은 바닥을 사용할 수 있습니다 :

    당신은 바닥을 사용할 수 있습니다 :

    select x, ABS(x) - FLOOR(ABS(x))
    from (
        select 2.938 as x
    ) a
    

    산출:

    x                                       
    -------- ----------
    2.938    0.938
    

    또는 당신은 문자열을 사용할 수 있습니다 :

    select x, SUBSTRING(cast(x as varchar(max)), charindex(cast(x as varchar(max)), '.') + 3, len(cast(x as varchar(max))))
    from (
        select 2.938 as x
    ) a
    
  4. ==============================

    4.더 일반화 된 방법은 병합 PARSENAME 그리고 % 연산자 일 수있다. (위의 답변의 두 대답으로)

    더 일반화 된 방법은 병합 PARSENAME 그리고 % 연산자 일 수있다. (위의 답변의 두 대답으로)

    SQLMenace 이상 1 방식에 따라 결과

    select PARSENAME(0.001,1) 
    

    결과 : 001

    select PARSENAME(0.0010,1) 
    

    결과 : 0010

    select PARSENAME(-0.001,1)
    

    결과 : 001

    select PARSENAME(-1,1)
    

    결과 : -1 ->해야이 부분 정수 반환하지

    select PARSENAME(0,1)
    

    결과 : 0

    select PARSENAME(1,1)
    

    결과 : 1 ->해야 파트 정수 반환하지

    select PARSENAME(100.00,1)
    

    결과 : 00

    파벨 Morshenyuk 이상 1 방식에 따라 결과 "0" 이 경우 결과의 일부이다.

    SELECT (100.0001 % 1)
    

    결과 : 0.0001

    SELECT (100.0010 % 1)
    

    결과 : 0.0010를

    SELECT (0.0001 % 1)
    

    결과 : 0.0001

    SELECT (0001 % 1)
    

    결과 : 0

    SELECT (1 % 1)
    

    결과 : 0

    SELECT (100 % 1)
    

    결과 : 0

    모두 결합 :

    SELECT PARSENAME((100.0001 % 1),1)
    

    결과 : 0001

    SELECT PARSENAME((100.0010 % 1),1)
    

    결과 : 0010

    SELECT PARSENAME((0.0001 % 1),1)
    

    결과 : 0001

    SELECT PARSENAME((0001 % 1),1)
    

    결과 : 0

    SELECT PARSENAME((1 % 1),1)
    

    결과 : 0

    SELECT PARSENAME((100 % 1),1)
    

    결과 : 0

    하지만 여전히 남아있는 하나의 문제는 아닌 제로 숫자 후 제로 결과 (-> 0010 0.0010 예)의 일부이다. 될 수있는 하나는 그것을 제거하기 위해 다른 논리를 적용해야합니다.

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

    5.(구문 약간 다름) 일반적인 해킹 인

    (구문 약간 다름) 일반적인 해킹 인

    x - floor(x)
    

    즉, 소수 부분입니다. 정수로하려면 그것을 확장 할 수 있습니다.

    (x - floor(x)) * 1000
    
  6. ==============================

    6.저도 같은 문제를 겪고 및 '%'연산자로 해결 :

    저도 같은 문제를 겪고 및 '%'연산자로 해결 :

    select 12.54 % 1;
    
  7. ==============================

    7.의 요청에 의한 매우 간단합니다 :

    의 요청에 의한 매우 간단합니다 :

    select substr('123.123',instr('123.123','.')+1, length('123.123')) from dual;
    

    전화 번호 또는 열 이름 대신 123.122 넣어

  8. ==============================

    8.당신이 수천, 장소에 값을 원하는 알고 있다면, 그건

    당신이 수천, 장소에 값을 원하는 알고 있다면, 그건

    SELECT (num - FLOOR(num)) * 1000 FROM table...;
    
  9. ==============================

    9.선택하려는 경우 소수이 WHERE 절을 사용하는 경우에만 :

    선택하려는 경우 소수이 WHERE 절을 사용하는 경우에만 :

        (CAST(RIGHT(Myfield, LEN( Myfield)-CHARINDEX('.',Myfield)+1 ) AS FLOAT)) <> 0
    

    당신이 명확한 목록을 원하는 경우 소수점 / 정수로 정렬 할 수 있습니다 :

        CASE WHEN 0 = CAST(RIGHT(Myfield, LEN( Myfield)-CHARINDEX('.',Myfield)+1 ) AS FLOAT) THEN 'Integer' ELSE 'Decimal' END AS Type
    
  10. ==============================

    10.X - TRUNC (X)는, 너무 부정적인 작동합니다.

    X - TRUNC (X)는, 너무 부정적인 작동합니다.

    그것은 두 번이 아닌 정수로, 당신에게 수의 소수 부분을 줄 것입니다.

  11. ==============================

    11.당신은 권리를 사용할 수 있습니다 :

    당신은 권리를 사용할 수 있습니다 :

     select RIGHT(123.45,2) return => 45
    
  12. ==============================

    12.CAST (RIGHT (MyField FLOAT AS, LEN (MyField) -CHARINDEX ( '.', MyField) +1))

    CAST (RIGHT (MyField FLOAT AS, LEN (MyField) -CHARINDEX ( '.', MyField) +1))

  13. from https://stackoverflow.com/questions/3418606/sql-how-do-i-get-only-the-numbers-after-the-decimal by cc-by-sa and MIT license