DECIMAL 또는 DEC 스칼라 함수

DECIMAL 함수는 숫자의 10진수 표시, 숫자의 문자열 표시 또는 날짜 시간 값을 리턴합니다.

숫자 - DECIMAL

Read syntax diagramSkip visual syntax diagram DECIMALDEC (numeric-expression ,precision,scale )

문자열 - DECIMAL

Read syntax diagramSkip visual syntax diagram DECIMALDEC (string-expression ,precision,scale,decimal-character )

날짜 및 시간 - DECIMAL

Read syntax diagramSkip visual syntax diagram DECIMALDEC (datetime-expression ,precision,scale)

스키마는 SYSIBM입니다.

Numeric to DECIMAL
숫자 표현식
내장 숫자 데이터 유형의 값을 리턴하는 표현식입니다.
정밀도
값이 1 - 31 범위인 정수 상수. 기본 정밀도는 입력 표현식의 데이터 유형에 따라 다릅니다.
  • 31: 10진 부동 소수점(DECFLOAT)
  • 15: 부동 소수점(REAL 또는 DOUBLE) 또는 10진수(DECIMAL)
  • 19: 대형 정수(BIGINT)
  • 11: 큰 정수(INTEGER)
  • 5: 작은 정수(SMALLINT)
배율
0 - precision 값 범위의 정수 상수. 기본 스케일은 0입니다.

결과는 정밀도가 precision이고 스케일이 scale인 10진수 컬럼 또는 변수에 첫 번째 인수가 지정된 경우 발생하는 숫자와 동일한 숫자입니다. 10진수 구문자 문자의 오른쪽 자릿수가 스케일 scale보다 크면 10진수 끝부터 숫자가 잘립니다. 숫자의 전체 파트를 나타내는 에 필요한 유효 10진수 자릿수가 precision - scale보다 크면 오류가 리턴됩니다(SQLSTATE 22003).

문자열 - DECIMAL
문자열 표현식
문자 상수의 최대 길이보다 크지 않은 길이를 갖는 문자열 또는 숫자의 유니코드 그래픽 문자열 표시 인 값을 리턴하는 expression 입니다. string-expression의 데이터 유형은 CLOB 또는 DBCLOB일 수 없습니다(SQLSTATE 42884). 앞 공백과 뒷 공백은 문자열에서 제거되며 결과 문자열은 정수, 10진수, 부동 소수점 또는 10진수 부동 소수점 상수를 구성하기 위한 규칙을 준수해야 합니다(SQLSTATE 22018).

string-expression 은 상수 decimal-character의 코드 페이지와 일치해야 하는 경우 section 코드 페이지로 변환됩니다.

정밀도
결과의 정밀도를 지정하고 1 - 31 범위의 값을 갖는 정수 상수. 지정되지 않는 경우 기본값은 15입니다.
배율
결과의 스케일을 지정하고 0 - precision 범위의 값을 갖는 정수 상수. 지정되지 않는 경우 기본값은 0입니다.
10진수문자
string-expression의 10진수와 숫자의 전체 파트를 구분하는 데 사용되는 1바이트 문자 상수를 지정합니다. 문자는 숫자, 플러스(+), 마이너스(-) 또는 공백일 수 없으며 string-expression에 여러 번 나타날 수 있습니다(SQLSTATE 42815).

결과는 CAST(string-expression AS DECIMAL(precision, scale))의 결과와 같은 숫자입니다. 10진수 구문자 문자의 오른쪽 자릿수가 스케일 scale보다 크면 10진수 끝부터 숫자가 잘립니다. string-expression에서 10진 문자(숫자의 전체 파트) 왼쪽의 유효 자릿수가 precision - scale보다 크면 오류가 리턴됩니다(SQLSTATE 22003). decimal-character 인수에 다른 값이 지정되면 서브스트링에서 기본 10진 문자가 유효하지 않습니다(SQLSTATE 22018).

Datetime to DECIMAL
datetime 표현식
DATE, TIME 또는 TIMESTAMP 유형의 값을 리턴하는 표현식
정밀도
결과의 정밀도를 지정하고 1 - 31 범위의 값을 갖는 정수 상수. 지정되지 않는 경우 정밀도와 스케일의 기본값은 다음과 같이 datetime-expression의 데이터 유형에 따라 결정됩니다.
  • DATE의 경우 정밀도는 8이고 스케일은 0입니다. 결과는 날짜를 yyyymmdd로 나타내는 DECIMAL(8,0) 값입니다.
  • TIME의 경우 정밀도는 6이고 스케일은 0입니다. 결과는 시간을 hhmmss로 나타내는 DECIMAL(6,0) 값입니다.
  • TIMESTAMP(tp)의 경우 정밀도는 14+tp이고 스케일은 tp입니다. 결과는 시간소인을 yyyymmddhhmmss.nnnnnnnnnnnn으로 나타내는 DECIMAL(14+tp,tp) 값입니다.
배율
결과의 스케일을 지정하고 0 - precision 범위의 값을 갖는 정수 상수. 이 상수가 지정되지 않고 precision이 지정되는 경우 기본값은 0입니다.

결과는 CAST(datetime - expression AS DECIMAL(precision, scale))의 결과와 같은 숫자입니다. 10진수 구문자 문자의 오른쪽 자릿수가 스케일 scale보다 크면 10진수 끝부터 숫자가 잘립니다. string-expression에서 10진 문자(숫자의 전체 파트) 왼쪽의 유효 자릿수가 precision - scale보다 크면 오류가 리턴됩니다(SQLSTATE 22003).

첫 번째 인수가 널(NULL)일 수 있는 경우, 결과는 널(NULL)일 수 있습니다. 첫 번째 인수가 널(NULL)인 경우, 결과는 널(NULL) 값입니다.
주: CAST 스펙을 사용하여 응용프로그램의 이식성을 증가시켜야 합니다. 자세한 정보는 CAST 스펙을 참조하십시오.

예:

  • 예 1: EMPLOYEE 테이블의 EDLEVEL 컬럼 (데이터 유형 = SMALLINT) 에 대한 선택 목록에서 DECIMAL 데이터 유형 (정밀도 5및 스케일 2) 이 리턴되도록 강제 실행하려면 DECIMAL 함수를 사용하십시오. EMPNO 컬럼은 선택 목록에도 나타나야 합니다.
       SELECT EMPNO, DECIMAL(EDLEVEL,5,2)
         FROM EMPLOYEE
  • 예 2: 호스트 변수 PERIOD의 유형이 INTEGER인 것으로 가정합니다. 그런 다음 해당 값을 날짜 지속 기간으로 사용하려면 decimal(8,0)으로 "캐스트"되어야 합니다.
       SELECT PRSTDATE + DECIMAL(:PERIOD,8)
         FROM PROJECT
  • 예 3: SALARY 컬럼에 대한 갱신이 창을 통해 쉼표를 10진 문자로 사용하여 문자열로 입력되는 것으로 가정합니다(예를 들어, 사용자가 21400,50을 입력함). 애플리케이션으로 유효성을 검증한 경우, CHAR(10)으로 정의되는 호스트 변수 newsalary에 지정됩니다.
       UPDATE STAFF
         SET SALARY = DECIMAL(:newsalary, 9, 2, ',')
         WHERE ID = :empid;
    newsalary의 값은 21400.50이 됩니다.
  • 예 4: 기본 10진 문자(.)를 값에 추가합니다.
       DECIMAL('21400,50', 9, 2, '.')
    마침표(.)가 10진 문자로 지정되지만 쉼표(,)가 첫 번째 인수에서 구문 기호로 나타나므로 이 예는 실패합니다.
  • 예 5: 컬럼 STARTING(데이터 유형은 TIME)의 내부 값이 '12:10:00'인 것으로 가정합니다.
       DECIMAL(STARTING)
    결과 값은 121 000입니다.
  • 예 6: 컬럼 RECEIVED(데이터 유형은 TIMESTAMP)의 내부 값이 '1988-12-22-14.07.21.136421'인 것으로 가정합니다.
       DECIMAL(RECEIVED)
    결과 값은 19 881 222 140 721.136421입니다.
  • 예 7: 이 예는 다양한 날짜 시간 입력 값의 10진수 결과와 결과 정밀도 및 스케일을 보여줍니다. 연관된 값을 갖는 다음 컬럼이 존재하는 것으로 가정합니다.
    열 이름 데이터 유형
    ENDDT 날짜 2000-03-21
    ENDTM 시간 12:02:21
    ENDTS TIMESTAMP 2000-03-21-12.02.21.123456
    ENDTS0 TIMESTAMP(0) 2000-03-21-12.02.21
    ENDTS9 TIMESTAMP(9) 2000-03-21-12.02.21.123456789
    다음 표는 다양한 날짜 및 시간 입력 값의 10진수 결과와 결과 정밀도 및 스케일을 보여줍니다.
    DECIMAL(인수) 정밀도와 스케일 결과
    DECIMAL(ENDDT) (8,0) 20000321.
    DECIMAL(ENDDT, 10) (10,0) 20000321.
    DECIMAL(ENDDT, 12, 2) (12,2) 20000321.00
    DECIMAL(ENDTM) (6,0) 120221.
    DECIMAL(ENDTM, 10) (10,0) 120221.
    DECIMAL(ENDTM, 10, 2) (10,2) 120221.00
    DECIMAL(ENDTS) (20, 6) 20000321120221.123456
    DECIMAL(ENDTS, 23) (23, 0) 20000321120221.
    DECIMAL(ENDTS, 23, 4) (23, 4) 20000321120221.1234
    DECIMAL(ENDTS0) (14,0) 20000321120221.
    DECIMAL(ENDTS9) (23,9) 20000321120221.123456789