DECIMAL 또는 DEC 스칼라 함수
DECIMAL 함수는 숫자의 10진수 표시, 숫자의 문자열 표시 또는 날짜 시간 값을 리턴합니다.
숫자 - DECIMAL
문자열 - DECIMAL
날짜 및 시간 - DECIMAL
스키마는 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).
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에
지정됩니다.
newsalary의 값은 21400.50이 됩니다.UPDATE STAFF SET SALARY = DECIMAL(:newsalary, 9, 2, ',') WHERE ID = :empid;
- 예 4: 기본 10진 문자(.)를 값에 추가합니다.
마침표(.)가 10진 문자로 지정되지만 쉼표(,)가 첫 번째 인수에서 구문 기호로 나타나므로 이 예는 실패합니다.DECIMAL('21400,50', 9, 2, '.')
- 예 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진수 결과와
결과 정밀도 및 스케일을 보여줍니다. 연관된 값을
갖는 다음 컬럼이 존재하는 것으로 가정합니다.다음 표는 다양한 날짜 및 시간 입력 값의 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 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