メインコンテンツまでスキップ
に最終更新

DECIMAL 型へのキャスト

文字列からの変換​

厳格モード​

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。

BNF 定義​

<decimal>     ::= <whitespace>* <value> <whitespace>*

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"

<value> ::= <sign>? <significand> <exponent>?

<sign> ::= "+" | "-"

<significand> ::= <digits> "." <digits> | <digits> | <digits> "." | "." <digits>

<digits> ::= <digit>+

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<exponent> ::= <e_marker> <sign>? <digits>

<e_marker> ::= "e" | "E"

ルールの説明​

  • 十進数字のみをサポートします。

  • 指数表記をサポートします。

  • 丸め処理をサポートします。

  • 文字列の前後には、" ", "\t", "\n", "\r", "\f", "\v" などの空白文字を任意の数だけ指定できます。

  • 整数部がオーバーフローした場合はエラーになります。

  • 形式が無効な場合はエラーになります。

例​

文字列Decimal(18, 6)説明
"123.1234567"123.123457丸め処理
"12345."12345.000000
"12345"12345.000000
".123456"0.123456
" \t\r\n\f\v123.456 \t\r\n\f\v"123.456000前後に空白文字を含む
" \t\r\n\f\v+123.456 \t\r\n\f\v"123.456000前後に空白文字を含み、正符号が付く
" \t\r\n\f\v-123.456 \t\r\n\f\v"-123.456000前後に空白文字を含み、負符号が付く
" \t\r\n\f\v+1.234e5 \t\r\n\f\v"123400.000000指数表記
" \t\r\n\f\v+1.234e+5 \t\r\n\f\v"123400.000000正の指数を使用した指数表記
" \t\r\n\f\v+1.234e-1 \t\r\n\f\v"0.123400負の指数を使用した指数表記
"123.456a"Error無効な形式
"1234567890123.123456"Errorオーバーフロー

非厳格モード​

結果は常に NULL 許容の型になります。

BNF 定義​

<decimal>     ::= <whitespace>* <value> <whitespace>*

<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"

<value> ::= <sign>? <significand> <exponent>

<sign> ::= "+" | "-"

<significand> ::= <digits> | <digits> "." <digits> | <digits> "." | "." <digits>

<digits> ::= <digit>+

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

<exponent> ::= <e_marker> <sign>? <digits>

<e_marker> ::= "e" | "E"

ルールの説明​

  • 厳格モードで有効なすべての形式をサポートします。

  • オーバーフローした場合は NULL に変換します。

  • 形式が無効な場合は NULL に変換します。

例​

文字列Decimal(18, 6)説明
"123.1234567"123.123457丸め処理
"12345."12345.000000
"12345"12345.000000
".123456"0.123456
" \t\r\n\f\v123.456 \t\r\n\f\v"123.456000前後に空白文字を含む
" \t\r\n\f\v+123.456 \t\r\n\f\v"123.456000前後に空白文字を含み、正符号が付く
" \t\r\n\f\v-123.456 \t\r\n\f\v"-123.456000前後に空白文字を含み、負符号が付く
" \t\r\n\f\v+1.234e5 \t\r\n\f\v"123400.000000指数表記
" \t\r\n\f\v+1.234e+5 \t\r\n\f\v"123400.000000正の指数を使用した指数表記
" \t\r\n\f\v+1.234e-1 \t\r\n\f\v"0.123400負の指数を使用した指数表記
"123.456a"NULL無効な形式
"1234567890123.123456"NULLオーバーフロー

bool からの変換​

true は 1 に、false は 0 に変換されます。

厳格モード​

オーバーフローした場合はエラーになります(例: cast bool as decimal(1, 1))。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。

非厳格モード​

オーバーフローした場合は NULL に変換します。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合:

  • オーバーフローする可能性がある場合(例: cast bool as decimal(1, 1))、結果は NULL 許容の型になります。

  • それ以外の場合、結果は NULL 非許容の型になります。

整数からの変換​

厳格モード​

オーバーフローした場合はエラーになります。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。

例​

intDecimal(18, 9)説明
123123.00000000
2147483647Errorオーバーフロー

非厳格モード​

オーバーフローした場合は NULL に変換します。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合:

  • オーバーフローする可能性がある場合(例: cast int as decimal(1, 0))、結果は NULL 許容の型になります。

  • それ以外の場合(例: cast int as decimal(18, 0))、結果は NULL 非許容の型になります。

例​

intDecimal(18, 9)説明
123123.00000000
2147483647NULLオーバーフロー

float/double からの変換​

丸め処理をサポートします。

厳格モード​

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。

  • Infinity と NaN はエラーになります。

  • オーバーフローした場合はエラーになります。

例​

float/doubleDecimal(18, 3)説明
1.12391.124丸め処理
3.40282e+38Errorオーバーフロー
InfinityError
NaNError

非厳格モード​

結果は常に NULL 許容の型になります。

  • +/-Inf は NULL に変換されます。

  • NaN は NULL に変換されます。

  • オーバーフローした場合は NULL に変換します。

例​

float/doubleDecimal(18, 6)説明
1.1234561.123456
3.40282e+38NULLオーバーフロー
InfinityNULL
NaNNULL

DECIMAL 型同士のキャスト​

丸め処理をサポートします。

厳格モード​

オーバーフローした場合はエラーになります。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。

例​

Decimal(18, 8)Decimal(10, 6)説明
1234.123456781234.123457丸め処理
12345.12345678Error整数部のオーバーフロー

非厳格モード​

オーバーフローした場合は NULL に変換します。

変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。

変換元の型が NULL 非許容の場合:

  • オーバーフローする可能性がある場合(例: cast decimal(18, 0) as decimal(9, 0))、結果は NULL 許容の型になります。

  • それ以外の場合(例: cast decimal(9, 0) as decimal(18, 0))、結果は NULL 非許容の型になります。

例​

Decimal(18, 8)Decimal(10, 6)説明
1234.123456781234.123457丸め処理
12345.12345678NULL整数部のオーバーフロー

date からの変換​

サポートされていません。

datetime からの変換​

サポートされていません。

TIMESTAMP_NS からの変換​

サポートされていません。

time からの変換​

サポートされていません。

その他の型からの変換​

サポートされていません。