programing

SQL - 소수 뒤의 숫자만 가져오려면 어떻게 해야 합니까?

elecom 2023. 6. 22. 21:28
반응형

SQL - 소수 뒤의 숫자만 가져오려면 어떻게 해야 합니까?

소수 뒤의 숫자만 어떻게 얻을 수 있습니까?

예:2.938=938

사용해 보십시오.

SELECT (num % 1)

한 가지 방법으로, 음의 값에도 효과가 있습니다.

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

select PARSENAME(@1,1)

사용할 수 있습니다.FLOOR:

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

출력:

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

또는 사용할 수 있습니다.SUBSTRING:

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

보다 일반적인 접근 방식은 PARSNAME과 % 연산자를 병합하는 것일 수 있습니다.(위의 두 가지 답변에서 답변한 바와 같이)

SQLMenace의 위의 첫 번째 접근 방식에 따른 결과

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

Pavel Morshenyuk "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

그러나 여전히 남아 있는 한 가지 문제는 0이 아닌 숫자가 결과의 일부가 된 후의 0입니다(예: 0.0010 -> 0010).그것을 제거하기 위해 다른 논리를 적용해야 할 수도 있습니다.

일반적인 해킹(구문학적으로 약간 다름)은

x - floor(x)

그것이 분수 부분입니다.정수로 만들려면 축척을 조정합니다.

(x - floor(x)) * 1000

저도 같은 문제가 있었고 '%' 연산자로 해결했습니다.

select 12.54 % 1;

쿼리를 사용하여 매우 단순하게 만듭니다.

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

대신 번호 또는 열 이름을 입력합니다.123.122

만약 당신이 그 값들을 천분의 일까지 원하는 것을 안다면, 장소, 그것은

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

십진수만 선택하려면 다음 WHERE 절을 사용합니다.

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

명확한 목록을 원하는 경우 10진수/정수로 정렬할 수 있습니다.

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

X - TRUNK(X)는 음수에도 사용됩니다.

숫자의 소수 부분을 정수가 아닌 두 배로 표시합니다.

십진법만 제공합니다.

입력 : (18.45)%1을 선택

산출량

0.45

오른쪽을 사용할 수 있습니다.

 select RIGHT(123.45,2) return => 45

CAST(오른쪽(MyField, LEN(MyField))-CHARINDEX('.', MyField)+1) AS FLOAT)

언급URL : https://stackoverflow.com/questions/3418606/sql-how-do-i-get-only-the-numbers-after-the-decimal

반응형