복붙노트

[SQL] 합니까 오라클은 숫자 데이터 유형에 대한 후행 제로를 저장?

SQL

합니까 오라클은 숫자 데이터 유형에 대한 후행 제로를 저장?

난에 수치 테이블을 저장하고 SQL Developer에서 그 표를 조회하고 때는 번호 데이터 형식 후미 제로를 나타내는 것은 아니다.

create table decimal_test(decimal_field number(*,10));

insert into decimal_test(decimal_field) values(10);
insert into decimal_test(decimal_field) values(10.11);
insert into decimal_test(decimal_field) values(10.100);
insert into decimal_test(decimal_field) values(10.00);

select * from decimal_test;

그 결과는

10
10.11
10.1
10

이러한 값은 자바 코드로 처리된다. 이 경우 내가 값을 저장하기 위해 BigDecimal를 사용하고 있습니다.

내가 BigDecimal를 (10.00)가있는 경우 저장 한 후, DB에 저장하기 전에 DB에서 반환 된 값의 BigDecimal (10)이다. 규모가 변경되기 때문에 BigDecimal의에서 같음 방법은 실패합니다.

그리고 난 소수점 정밀도가 일정하지 않습니다. 그대로 DB에 저장에 사용자는이 때문에 값의 요구 등의 BigDecimal (10.00) 또는 BigDecimal를 (10.000)을 설정할 수 있습니다.

오라클에서 후행 0을 저장할 수있는 방법이 있습니까?

해결법

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

    1.후행 제로의 존재는 디스플레이 문제가 아니라 저장 문제입니다. 트레일 링 제로는 중요하지 않고, 어쨌든 숫자의 내부 형식은 한 값이 올로 중요하지 않다. 10 10.00000 사이의 값 차이가 없습니다.

    후행 제로의 존재는 디스플레이 문제가 아니라 저장 문제입니다. 트레일 링 제로는 중요하지 않고, 어쨌든 숫자의 내부 형식은 한 값이 올로 중요하지 않다. 10 10.00000 사이의 값 차이가 없습니다.

    당신이 0을 뒤 필요하면 당신은 항상 디스플레이에 대한 값을 변환 할 때 서식을 사용할 수 있습니다. 예를 들면 :

    System.out.printf("%10.4d\n", decimalValue);
    

    문제는 규모의 차이를 경우, 당신은 비교하기 전에 적절한 값으로 스케일을 설정할 수 있습니다.

  2. ==============================

    2.당신이 숫자 입력의 규모 유지하려면 - 여분의 열에서 규모를 저장 (중요 할 수 있습니다 10.1의 측정은 측정 10.100 다릅니다).

    당신이 숫자 입력의 규모 유지하려면 - 여분의 열에서 규모를 저장 (중요 할 수 있습니다 10.1의 측정은 측정 10.100 다릅니다).

    create table decimal_test
    (decimal_field number(*,10),
     decimal_scale number(*,0)
    );
    

    입력의 크기를 계산하며, 새로운 열 decimal_scale에 저장한다.

    출력 형식에서이 값을 사용합니다.

    나는 문자열로 번호를 저장하는 것이 좋습니다하지 않는 게 좋을 - 당신은 규모를 유지하지만 숫자 유효성 검사를 느슨하게하고 잠재적으로 유형 변환으로 인한 잘못된 추정으로 CBO를 혼동 ...

  3. ==============================

    3.(10)와 10.00들은 일반적으로 같은 번호입니다. 당신이 10 $ 또는 10.00 $ 또는 10.0000 $를 지불해야하는 경우 (이 차이가되지 않습니다 :-)

    (10)와 10.00들은 일반적으로 같은 번호입니다. 당신이 10 $ 또는 10.00 $ 또는 10.0000 $를 지불해야하는 경우 (이 차이가되지 않습니다 :-)

    그러나, 당신은 측정에서 같은 값의 정밀도를 표현하는 10.00 그래서 수단을 원하는 경우에만 최대 2 소수점의 번호를 알고 있지만 실수는 10.00001 또는 10.009 수 있습니다이든, 당신은 additonally이 정보를 저장해야합니다 . 이렇게하는 한 가지 방법은 문자열 데이터 유형을 사용하는 것입니다,하지만 당신은 ( '00 또는 '10 말''10 .00)를 특정 형식에 충실해야 할 것이다 데이터베이스에서 계산이를 사용할 수 없습니다.

    또 다른 옵션은 수와 소수점, 예를 들어,의 정밀도에 대한 추가 열을 저장하는 것 값 = 10 / DECIMAL_PLACES = 2. 문자열을 저장하는 동안이 선호.

  4. from https://stackoverflow.com/questions/42199210/does-oracle-store-trailing-zeroes-for-number-data-type by cc-by-sa and MIT license