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
'programing' 카테고리의 다른 글
| Aggregate의 투영에서 $elemMatch를 사용하는 방법은 무엇입니까? (0) | 2023.06.22 |
|---|---|
| ASP.NET MVC에서 부분 보기용 컨트롤러 생성 (0) | 2023.06.22 |
| Sql JOIN 순서가 성능에 영향을 미칩니까? (0) | 2023.06.22 |
| 도커 내부에서 시작할 때 스프링 부팅 응용 프로그램이 부팅되지 않음 (0) | 2023.06.22 |
| 모든 원격 Git 분기를 로컬 분기로 추적 (0) | 2023.06.22 |