[SQL] SQL은 - 어떻게 소수점 이하 숫자 만받을 수 있나요?
SQLSQL은 - 어떻게 소수점 이하 숫자 만받을 수 있나요?
어떻게 소수점 이하 숫자 만받을 수 있나요?
실시 예 : 2.938 = 938
해결법
-
==============================
1.한 가지 방법, 음의 값도 작동
한 가지 방법, 음의 값도 작동
declare @1 decimal(4,3) select @1 = 2.938 select PARSENAME(@1,1)
-
==============================
2.이 시도:
이 시도:
SELECT (num % 1)
-
==============================
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.더 일반화 된 방법은 병합 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.(구문 약간 다름) 일반적인 해킹 인
(구문 약간 다름) 일반적인 해킹 인
x - floor(x)
즉, 소수 부분입니다. 정수로하려면 그것을 확장 할 수 있습니다.
(x - floor(x)) * 1000
-
==============================
6.저도 같은 문제를 겪고 및 '%'연산자로 해결 :
저도 같은 문제를 겪고 및 '%'연산자로 해결 :
select 12.54 % 1;
-
==============================
7.의 요청에 의한 매우 간단합니다 :
의 요청에 의한 매우 간단합니다 :
select substr('123.123',instr('123.123','.')+1, length('123.123')) from dual;
전화 번호 또는 열 이름 대신 123.122 넣어
-
==============================
8.당신이 수천, 장소에 값을 원하는 알고 있다면, 그건
당신이 수천, 장소에 값을 원하는 알고 있다면, 그건
SELECT (num - FLOOR(num)) * 1000 FROM table...;
-
==============================
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.X - TRUNC (X)는, 너무 부정적인 작동합니다.
X - TRUNC (X)는, 너무 부정적인 작동합니다.
그것은 두 번이 아닌 정수로, 당신에게 수의 소수 부분을 줄 것입니다.
-
==============================
11.당신은 권리를 사용할 수 있습니다 :
당신은 권리를 사용할 수 있습니다 :
select RIGHT(123.45,2) return => 45
-
==============================
12.CAST (RIGHT (MyField FLOAT AS, LEN (MyField) -CHARINDEX ( '.', MyField) +1))
CAST (RIGHT (MyField FLOAT AS, LEN (MyField) -CHARINDEX ( '.', MyField) +1))
from https://stackoverflow.com/questions/3418606/sql-how-do-i-get-only-the-numbers-after-the-decimal by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는 외국인 키 제약 조건을 활성화 (0) | 2020.06.06 |
---|---|
[SQL] 문자열 PHP에서 두 문자 사이의 문자열을 추출 (0) | 2020.06.06 |
[SQL] MySQL은 0과 널 (null)을 교체 (0) | 2020.06.06 |
[SQL] 날짜에서 MySQL의 스트립 시간 성분 (0) | 2020.06.06 |
[SQL] 키 - 값 쌍 테이블에 1 행 테이블 평탄화 (0) | 2020.06.06 |