INT 型へのキャスト
文字列からの変換
厳格モード
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
BNF 定義
<integer> ::= <whitespace>* <sign>? <decimal_digit>+ <whitespace>*
<sign> ::= "+" | "-"
<decimal_digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
変換規則
-
十進数形式の数値のみをサポートします。
-
数値の先頭には正または負の符号を付けられます。
-
文字列の前後には、' '、'\t'、'\n'、'\r'、'\f'、'\v' などの空白文字を任意の数だけ含められます。
-
指数表記はサポートしません。
-
その他の形式ではエラーになります。
-
オーバーフローした場合はエラーになります。
例
| 文字列 | INT へのキャスト結果 | 備考 |
|---|---|---|
| "2147483647" | 2147483647 | |
| "-2147483648" | -2147483648 | |
| " \t\r\n\f\v2147483647 \t\r\n\f\v" | 2147483647 | 前後に空白文字あり |
| " \t\r\n\f\v+2147483647 \t\r\n\f\v" | 2147483647 | 前後に空白文字と正の符号あり |
| " \t\r\n\f\v-2147483648 \t\r\n\f\v" | -2147483648 | 前後に空白文字と負の符号あり |
| 'abc' | Error | 無効な形式 |
| '123.456' | Error | 小数形式はサポートされません |
| '1.23456e5' | Error | 指数表記はサポートされません |
| '2147483648' | Error | オーバーフロー |
| '-2147483649' | Error | オーバーフロー |
非厳格モード
常に NULL 許容型を返します。
BNF 定義
<integer_non_strict> ::= <whitespace_char>* <sign>? <number> <whitespace_char>*
<sign> ::= "+" | "-"
<number> ::= <decimal_number> | <decimal_number> "." <decimal_number> | <decimal_number> "." | "." <decimal_number>
<decimal_number> ::= <decimal_digit>+
<decimal_digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace_char> ::= " " | "\t" | "\n" | "\r" | "\f" | "\v"
変換規則
-
厳格モードで有効な形式をすべてサポートします。
-
厳格モードで有効な形式に小数部が続く場合もサポートします。変換結果では小数部を切り捨てます。
-
指数表記は NULL に変換します。
-
その他の形式も NULL に変換します。
-
オーバーフローした場合は NULL に変換します。
例
| 文字列 | INT へのキャスト結果 | 備考 |
|---|---|---|
| "2147483647" | 2147483647 | |
| "-2147483648" | -2147483648 | |
| " \t\r\n\f\v2147483647 \t\r\n\f\v" | 2147483647 | 前後に空白文字あり |
| " \t\r\n\f\v+2147483647 \t\r\n\f\v" | 2147483647 | 前後に空白文字と正の符号あり |
| " \t\r\n\f\v-2147483648 \t\r\n\f\v" | -2147483648 | 前後に空白文字と負の符号あり |
| '123.456' | 123 | |
| '1.23456e5' | NULL | 指数表記 |
| 'abc' | NULL | 無効な形式 |
| '2147483648' | NULL | オーバーフロー |
| '-2147483649' | NULL | オーバーフロー |
BOOL からの変換
true は 1 に、false は 0 に変換します。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
整数型から整数型への変換
任意の整数型間の変換をサポートします。
厳格モード
オーバーフローした場合はエラーになります。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
例
| Bigint | int | 備考 |
|---|---|---|
| 2147483647 | 2147483647 | |
| 2147483648 | Error | オーバーフロー |
| -2147483649 | Error | オーバーフロー |
非厳格モード
バージョン 4.0 以降、オーバーフロー時の結果は未定義の値ではなく NULL になります。
オーバーフローした場合は NULL を返します。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合:
-
オーバーフローの可能性がある場合(例:
cast bigint as int)、NULL 許容型を返します。 -
それ以外の場合(例:
cast int as bigint)、NULL 非許容型を返します。
例
| Bigint | int | 備考 |
|---|---|---|
| 2147483647 | 2147483647 | |
| 2147483648 | NULL | オーバーフロー |
| -2147483649 | NULL | オーバーフロー |
DATE からの変換
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
変換規則
バージョン 4.0 以降、DATE から TINYINT および SMALLINT へのキャストはサポートされません。
-
必ずオーバーフローするため、TINYINT および SMALLINT へのキャストはサポートしません。
-
INT、BIGINT、LARGEINT へのキャストをサポートします。日付の年、月、日を順に連結して整数を作ります。月と日は二桁で表し、10 未満の場合は先頭に 0 を付けます。
例
| date | int |
|---|---|
| 2025-03-14 | 20250314 |
DATETIME からの変換
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
変換規則
バージョン 4.0 以降、DATETIME から TINYINT、SMALLINT、INT へのキャストはサポートされません。
-
必ずオーバーフローするため、TINYINT、SMALLINT、INT へのキャストはサポートしません。
-
BIGINT、LARGEINT へのキャストをサポートします。DATETIME のマイクロ秒部分を切り捨ててから、年、月、日、時、分、秒を順に連結して整数を作ります。月、日、時、分、秒は二桁で表し、10 未満の場合は先頭に 0 を付けます。
例
| datetime | int |
|---|---|
| 2025-03-14 17:00:01.123456 | 20250314170001 |
| 9999-12-31 23:59:59.999999 | 99991231235959 |
TIMESTAMP_NS からの変換
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
変換規則
-
必ずオーバーフローするため、TINYINT、SMALLINT、INT へのキャストはサポートしません。
-
BIGINT および LARGEINT へのキャストをサポートします。TIMESTAMP_NS のナノ秒部分を切り捨ててから、年、月、日、時、分、秒を順に連結して整数を作ります。月、日、時、分、秒は二桁で表し、10 未満の場合は先頭に 0 を付けます。
例
| 入力 TIMESTAMP_NS | 変換先の型 | 結果 |
|---|---|---|
1677-09-21 00:12:43.145224192 | BIGINT | 16770921001243 |
1969-12-31 23:59:59.999999999 | BIGINT | 19691231235959 |
2024-02-29 12:34:56.123456789 | LARGEINT | 20240229123456 |
2262-04-11 23:47:16.854775807 | LARGEINT | 22620411234716 |
FLOAT/DOUBLE からの変換
丸め処理はサポートしません。
厳格モード
変換規則
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
-
オーバーフローした場合はエラーになります。
-
Infinity および NaN はエラーになります。
例
| float/double | INT へのキャスト結果 | 備考 |
|---|---|---|
| 1.5 | 1 | 小数部の切り捨て |
| 1.79769E308 | Error | オーバーフロー |
| Infinity | Error | |
| NaN | Error |
非厳格モード
常に NULL 許容型を返します。
変換規則
バージョン 4.0 以降、オーバーフロー時の結果は未定義の値ではなく NULL になります。
-
オーバーフローした場合は NULL に変換します。
-
Infinity は NULL に変換します。
-
NaN は NULL に変換します。
例
| float/double | INT へのキャスト結果 | 備考 |
|---|---|---|
| 1.5 | 1 | 小数部の切り捨て |
| 1.79769E308 | NULL | オーバーフロー |
| Infinity | NULL | |
| -Infinity | NULL | |
| NaN | NULL |
DECIMAL からの変換
丸め処理はサポートしません。
厳格モード
オーバーフローした場合はエラーになります。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
例
| Decimal(18, 6) | int | 備考 |
|---|---|---|
| 1.654321 | 1 | 小数部の切り捨て |
| 12345678901.123 | Error | オーバーフロー |
非厳格モード
オーバーフローした場合は NULL に変換します。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合:
-
オーバーフローの可能性がある場合(例:
cast decimal(18, 0) as int)、NULL 許容型を返します。 -
それ以外の場合(例:
cast decimal(9, 0) as bigint)、NULL 非許容型を返します。
例
| Decimal(18, 6) | int | 備考 |
|---|---|---|
| 1.654321 | 1 | 小数部の切り捨て |
| 12345678901.123 | NULL | オーバーフロー |
TIME からの変換
マイクロ秒に変換します。
厳格モード
オーバーフローした場合はエラーになります。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合、NULL 非許容型を返します。
例
| Time | int | 備考 |
|---|---|---|
| 00:00:01 | 1000000 | |
| 838:59:58 | Error | オーバーフロー |
非厳格モード
バージョン 4.0 以降、オーバーフロー時の結果は未定義の値ではなく NULL になります。
オーバーフローした場合は NULL に変換します。
変換元の型が NULL 許容型の場合、NULL 許容型を返します。
変換元の型が NULL 非許容型の場合:
-
オーバーフローの可能性がある場合(例:
cast time as tinyint)、NULL 許容型を返します。 -
それ以外の場合(例:
cast time as bigint)、NULL 非許容型を返します。
例
| Time | int | 備考 |
|---|---|---|
| 00:00:01 | 1000000 | |
| 838:59:58 | NULL | オーバーフロー |
その他の型
サポートされません。