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

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

TIMESTAMP_NS からの変換​

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

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

変換規則​

  • 必ずオーバーフローするため、TINYINT、SMALLINT、INT へのキャストはサポートしません。

  • BIGINT および LARGEINT へのキャストをサポートします。TIMESTAMP_NS のナノ秒部分を切り捨ててから、年、月、日、時、分、秒を順に連結して整数を作ります。月、日、時、分、秒は二桁で表し、10 未満の場合は先頭に 0 を付けます。

例​

入力 TIMESTAMP_NS変換先の型結果
1677-09-21 00:12:43.145224192BIGINT16770921001243
1969-12-31 23:59:59.999999999BIGINT19691231235959
2024-02-29 12:34:56.123456789LARGEINT20240229123456
2262-04-11 23:47:16.854775807LARGEINT22620411234716

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オーバーフロー

その他の型​

サポートされません。