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

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 許容型を返します。

例​

Bigintint備考
21474836472147483647
2147483648Errorオーバーフロー
-2147483649Errorオーバーフロー

非厳格モード​

仕様変更

バージョン 4.0 以降、オーバーフローの結果は未定義の値ではなく NULL になります。

オーバーフローした場合は NULL を返します。

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

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

  • オーバーフローが起こり得るとき(例:cast bigint as int)は、NULL 許容型を返します。

  • それ以外のとき(例:cast int as bigint)は、非 NULL 許容型を返します。

例​

Bigintint備考
21474836472147483647
2147483648NULLオーバーフロー
-2147483649NULLオーバーフロー

date からの変換​

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

変換元の型が非 NULL 許容型の場合、非 NULL 許容型を返します。

変換規則​

仕様変更

バージョン 4.0 以降、date から tinyint および smallint への変換はサポートされません。

  • 必ずオーバーフローするため、tinyint および smallint への変換はサポートしません。

  • int、bigint、largeint への変換をサポートします。日付の年、月、日をこの順に連結して整数を作ります。月と日は二桁で表し、10 未満の場合は先頭に 0 を補います。

例​

dateint
2025-03-1420250314

datetime からの変換​

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

変換元の型が非 NULL 許容型の場合、非 NULL 許容型を返します。

変換規則​

仕様変更

バージョン 4.0 以降、datetime から tinyint、smallint、int への変換はサポートされません。

  • 必ずオーバーフローするため、tinyint、smallint、int への変換はサポートしません。

  • bigint、largeint への変換をサポートします。datetime のマイクロ秒部分を破棄し、年、月、日、時、分、秒をこの順に連結して整数を作ります。月、日、時、分、秒は二桁で表し、10 未満の場合は先頭に 0 を補います。

例​

datetimeint
2025-03-14 17:00:01.12345620250314170001
9999-12-31 23:59:59.99999999991231235959

float/double からの変換​

丸め処理はサポートしません。

厳格モード​

変換規則​

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

変換元の型が非 NULL 許容型の場合、非 NULL 許容型を返します。

  • オーバーフローした場合はエラーを返します。

  • Infinity または NaN の場合はエラーを返します。

例​

float/doubleint への変換結果備考
1.51小数部を破棄
1.79769E308Errorオーバーフロー
InfinityError
NaNError

非厳格モード​

常に NULL 許容型を返します。

変換規則​

仕様変更

バージョン 4.0 以降、オーバーフローの結果は未定義の値ではなく NULL になります。

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

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

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

例​

float/doubleint への変換結果備考
1.51小数部を破棄
1.79769E308NULLオーバーフロー
InfinityNULL
-InfinityNULL
NaNNULL

decimal からの変換​

丸め処理はサポートしません。

厳格モード​

オーバーフローした場合はエラーを返します。

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

変換元の型が非 NULL 許容型の場合、非 NULL 許容型を返します。

例​

Decimal(18, 6)int備考
1.6543211小数部を破棄
12345678901.123Errorオーバーフロー

非厳格モード​

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

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

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

  • オーバーフローが起こり得るとき(例:cast decimal(18, 0) as int)は、NULL 許容型を返します。

  • それ以外のとき(例:cast decimal(9, 0) as bigint)は、非 NULL 許容型を返します。

例​

Decimal(18, 6)int備考
1.6543211小数部を破棄
12345678901.123NULLオーバーフロー

time からの変換​

マイクロ秒に変換されます。

厳格モード​

オーバーフローした場合はエラーを返します。

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

変換元の型が非 NULL 許容型の場合、非 NULL 許容型を返します。

例​

Timeint備考
00:00:011000000
838:59:58Errorオーバーフロー

非厳格モード​

仕様変更

バージョン 4.0 以降、オーバーフローの結果は未定義の値ではなく NULL になります。

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

変換元の型が NULL 許容型の場合、NULL 許容型を返します。

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

  • オーバーフローが起こり得るとき(例:cast time as tinyint)は、NULL 許容型を返します。

  • それ以外のとき(例:cast time as bigint)は、非 NULL 許容型を返します。

例​

Timeint備考
00:00:011000000
838:59:58NULLオーバーフロー

その他の型​

サポートされません。