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 非許容の型になります。
例
| int | Decimal(18, 9) | 説明 |
|---|---|---|
| 123 | 123.00000000 | |
| 2147483647 | Error | オーバーフロー |
非厳格モード
オーバーフローした場合は NULL に変換します。
変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。
変換元の型が NULL 非許容の場合:
-
オーバーフローする可能性がある場合(例:
cast int as decimal(1, 0))、結果は NULL 許容の型になります。 -
それ以外の場合(例:
cast int as decimal(18, 0))、結果は NULL 非許容の型になります。
例
| int | Decimal(18, 9) | 説明 |
|---|---|---|
| 123 | 123.00000000 | |
| 2147483647 | NULL | オーバーフロー |
float/double からの変換
丸め処理をサポートします。
厳格モード
変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。
変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。
-
Infinity と NaN はエラーになります。
-
オーバーフローした場合はエラーになります。
例
| float/double | Decimal(18, 3) | 説明 |
|---|---|---|
| 1.1239 | 1.124 | 丸め処理 |
| 3.40282e+38 | Error | オーバーフロー |
| Infinity | Error | |
| NaN | Error |
非厳格モード
結果は常に NULL 許容の型になります。
-
+/-Inf は NULL に変換されます。
-
NaN は NULL に変換されます。
-
オーバーフローした場合は NULL に変換します。
例
| float/double | Decimal(18, 6) | 説明 |
|---|---|---|
| 1.123456 | 1.123456 | |
| 3.40282e+38 | NULL | オーバーフロー |
| Infinity | NULL | |
| NaN | NULL |
DECIMAL 型同士のキャスト
丸め処理をサポートします。
厳格モード
オーバーフローした場合はエラーになります。
変換元の型が NULL 許容の場合、結果も NULL 許容の型になります。
変換元の型が NULL 非許容の場合、結果も NULL 非許容の型になります。
例
| Decimal(18, 8) | Decimal(10, 6) | 説明 |
|---|---|---|
| 1234.12345678 | 1234.123457 | 丸め処理 |
| 12345.12345678 | Error | 整数部のオーバーフロー |
非厳格モード
オーバーフローした場合は 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.12345678 | 1234.123457 | 丸め処理 |
| 12345.12345678 | NULL | 整数部のオーバーフロー |
date からの変換
サポートされていません。
datetime からの変換
サポートされていません。
TIMESTAMP_NS からの変換
サポートされていません。
time からの変換
サポートされていません。
その他の型からの変換
サポートされていません。