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 |
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 | オーバーフロー |
その他の型
サポートされません。