メインコンテンツまでスキップ

INT型へのキャスト

文字列から

Strictモード

ソースタイプがnullableの場合、nullableタイプを返します;

ソースタイプがnon-nullableの場合、non-nullableタイプを返します;

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"

ルール説明

  • 10進形式の数値のみをサポート

  • 数値には正または負の符号文字を前置可能

  • 文字列では任意の前置および後置の空白文字を許可(' ', '\t', '\n', '\r', '\f', '\v' を含む)

  • 科学記数法はサポートしない

  • その他の形式についてはエラーを返す

  • オーバーフローの場合はエラーを返す

StringCast as int resultComment
"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オーバーフロー

Non-strictモード

常にnullable型を返す。

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"

ルール説明

  • strict modeからの全ての有効な形式をサポート;

  • 小数部が続くstrict mode形式をサポート、変換結果は小数部を直接切り捨て;

  • 科学記数法形式はNULLに変換;

  • その他の全ての形式の場合はNULLに変換;

  • オーバーフローが発生した場合はNULLに変換。

StringCast as int resultComment
"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に変換。

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

整数から整数へ

任意の整数型間の変換をサポート。

Strict mode

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

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

BigintintComment
21474836472147483647
2147483648Errorオーバーフロー
-2147483649Errorオーバーフロー

Non-strict mode

動作変更

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

オーバーフローが発生した場合はNULLを返す。

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合:

  • オーバーフローが可能な場合(例:cast bigint as int)、nullable型を返す;

  • それ以外の場合はnon-nullable型を返す(例:cast int as bigint)。

BigintintComment
21474836472147483647
2147483648NULLオーバーフロー
-2147483649NULLオーバーフロー

dateから

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

ルール説明

動作変更

バージョン4.0以降、dateからtinyintおよびsmallintへのキャストはサポートされなくなりました。

  • tinyintおよびsmallintへのキャストはサポートしない。オーバーフローが必ず発生するため。

  • int、bigint、largeintへのキャストをサポート。日付の年、月、日の数値を順番に連結して整数を形成し、月と日は2桁として扱い、10未満の場合は先頭に0を埋める。

dateint
2025-03-1420250314

datetimeから

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

ルール説明

動作変更

バージョン4.0以降、datetimeからtinyint、smallint、intへのキャストはサポートされなくなりました。

  • tinyint、smallint、intへのキャストはサポートしない。オーバーフローが必ず発生するため;

  • bigint、largeintへのキャストをサポート。datetimeのマイクロ秒部分を破棄し、年、月、日、時、分、秒を順番に連結して整数を形成し、月、日、時、分、秒は2桁として扱い、10未満の場合は先頭に0を埋める。

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

float/doubleから

四捨五入はサポートしない。

Strict mode

ルール説明

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

  • オーバーフローが発生した場合はエラーを返す;

  • InfinityおよびNaN値の場合はエラーを返す。

float/doubleCast as intComment
1.51切り捨て
1.79769E308Errorオーバーフロー
InfinityError
NaNError

Non-strict mode

常にnullable型を返す。

ルール説明

動作変更

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

  • オーバーフローが発生した場合はNULLに変換;

  • InfinityはNULLに変換;

  • NaNはNULLに変換。

float/doubleCast as intComment
1.51切り捨て
1.79769E308NULLオーバーフロー
InfinityNULL
-InfinityNULL
NaNNULL

decimalから

四捨五入はサポートしない。

Strict mode

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

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

Decimal(18, 6)intcomment
1.6543211切り捨て
12345678901.123Errorオーバーフロー

Non-strict mode

オーバーフローが発生した場合はNULLに変換。

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合:

  • オーバーフローが可能な場合(例:cast decimal(18, 0) as int)、nullable型を返す;

  • それ以外の場合はnon-nullable型を返す(例:cast decimal(9, 0) as bigint)。

Decimal(18, 6)intcomment
1.6543211切り捨て
12345678901.123NULLオーバーフロー

timeから

マイクロ秒に変換。

Strict mode

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

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合、non-nullable型を返す。

TimeintComment
00:00:011000000
838:59:58Errorオーバーフロー

Non-strict mode

動作変更

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

オーバーフローが発生した場合はNULLに変換。

ソース型がnullableの場合、nullable型を返す。

ソース型がnon-nullableの場合:

  • オーバーフローが可能な場合(例:cast time as tinyint)、nullable型を返す;

  • それ以外の場合はnon-nullable型を返す(例:cast time as bigint)。

TimeintComment
00:00:011000000
838:59:58NULLオーバーフロー

その他の型

サポートしない