DECIMAL または DEC
DECIMAL 関数は、10 進数表現を返します。
数値から 10 進数に
>>-+-DECIMAL-+--------------------------------------------------> '-DEC-----' >--(--numeric-expression--+----------------------------+--)---->< '-,--precision--+----------+-' '-,--scale-'
ストリングから 10 進数に
>>-+-DECIMAL-+--------------------------------------------------> '-DEC-----' >--(--string-expression--+------------------------------------------------------+--)->< '-,--precision--+------------------------------------+-' '-,--scale--+----------------------+-' '-,--decimal-character-'
日付/時刻→ 10 進数
>>-+-DECIMAL-+--------------------------------------------------> '-DEC-----' >--(--datetime-expression--+----------------------------+--)--->< '-,--precision--+----------+-' '-,--scale-'
DECIMAL 関数は、次のものの 10 進数表現を戻します。
- 数値
- 10 進数の文字ストリング表現またはグラフィック・ストリング表現
- 整数の文字ストリング表現またはグラフィック・ストリング表現
- 浮動小数点数の文字ストリング表現またはグラフィック・ストリング表現
- 10 進浮動小数点数の文字ストリング表現またはグラフィック・ストリング表現
- 日付
- 時刻
- タイム・スタンプ
数値から 10 進数に
- numeric-expression
- 任意の組み込み数値データ・タイプの値を戻す式。
- precision
- 1 以上で 63 以下の値を持つ整数定数。
デフォルトの精度 は、数値式 のデータ・タイプによって決まります。
- 5 (最初の引数が短整数の場合)
- 11 (最初の引数が長整数の場合)
- 19 (最初の引数が 64 ビット整数の場合)
- 15 (最初の引数が浮動小数点数、10 進数、数字、または位取りがゼロ以外の 2 進数の場合)
- 31 (10 進浮動小数点の場合)
- scale
- 0 以上で精度 以下である整数定数。 これを指定しないと、デフォルト値の 0 になります。
結果は、最初の引数が、精度 precision、位取り scale の 10 進数の列または変数に割り当てられたときに得られる数値と同じです。数値全体を表すのに必要な有効 10 進数字の桁数が precision-scale よりも大きい場合は、エラーが戻されます。最初の引数がヌルである可能性がある場合は、結果もヌルになる可能性があります。最初の引数がヌルの場合は、結果は NULL 値になります。
ストリングから 10 進数に
- string-expression
- 数値の文字ストリング表現またはグラフィック・ストリング表現を戻す式。 先行ブランクと末尾ブランクは除去され、結果のストリングは、浮動小数点数、10 進浮動小数点数、整数、または 10 進数の定数を形成する際の規則に合致している必要があります。
- precision
- 1 以上で 63 以下である整数定数。 これを指定しないと、デフォルト値の 15 になります。
- scale
- 0 以上で精度 以下である整数定数。 これを指定しないと、デフォルト値の 0 になります。
- decimal-character
- 数値の整数部分からstring-expression の小数桁数を区切るために使用される 1 バイトの文字定数を指定します。 この文字は、ピリオドかコンマとする必要があります。 decimal-character を指定しなかった場合は、デフォルトの小数点が使用されます。 詳しくは、小数点を参照してください。
日付/時刻→ 10 進数
- datetime-expression
- タイプ DATE、TIME、または TIMESTAMP の値を戻す式
- precision
- 結果の精度を指定する、1 以上で 63 以下の整数定数。この指定がない場合、精度および位取りのデフォルトは、以下のように 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) 値になります。
- scale
- 0 以上で精度 以下である整数定数。 これを指定しないと、デフォルト値の 0 になります。
結果は、CAST(datetime-expression AS DECIMAL(precision, scale)) の場合の結果と同じ数値になります。小数点文字の右側にある数字の数 が scale よりも多い場合、末尾から数字が切り捨てられます。 datetime-expression の小数点文字の左側にある有効数字 (数値の整数部分) の桁数が precision - scale より多い場合、エラーが戻されます。
この関数の結果は、精度が precision で位取りが scale である 10 進数です。 最初の引数がヌルである可能性がある場合は、結果もヌルになる可能性があります。最初の引数がヌルの場合は、結果は NULL 値になります。
注記
代替構文: 精度を指定する場合、アプリケーションの移植性を拡張するには、CAST 指定を使用します。 詳しくは、CAST の指定を参照してください。
例
- この例では、DECIMAL 関数を使用して表 EMPLOYEE の列 EDLEVEL (データ・タイプ = SMALLINT) に関する選択リストで DECIMAL データ・タイプ (精度が 5 で、位取りが 2) が戻されるようにしています。選択リストには、列 EMPNO も必要です。
SELECT EMPNO, DECIMAL(EDLEVEL,5,2) FROM EMPLOYEE
- 表 PROJECT を使用して、ホスト変数に指定されている期間だけ延ばされている開始日付 (PRSTDATE) を、すべて選択しています。ホスト変数 PERIOD は INTEGER タイプであると想定します。PERIOD の値を日付期間として使用するためには、PERIOD を「キャスト」
して DECIMAL(8,0) にする必要があります。
SELECT PRSTDATE + DECIMAL(:PERIOD,8) FROM PROJECT
- SALARY 列への更新が、小数点文字をコンマとして、文字ストリングでウィンドウから入力される (例えば、ユーザーが 21400,50 と入力する) とします。アプリケーションで妥当性検査を受けた後、この値は CHAR(10) と定義されているホスト変数 newsalary に割り当てられます。
SALARY の値は、これで 21400.50 になります。UPDATE STAFF SET SALARY = DECIMAL(:newsalary, 9, 2, ',') WHERE ID = :empid