メインコンテンツまでスキップ
バージョン: 26.x

INT型へのキャスト

文字列から

Strict mode

ソース型が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"2147483647With prefix and suffix whitespace
" \t\r\n\f\v+2147483647 \t\r\n\f\v"2147483647With prefix and suffix whitespace, positive sign
" \t\r\n\f\v-2147483648 \t\r\n\f\v"-2147483648With prefix and suffix whitespace, negative sign
'123.456'123
'1.23456e5'NULLScientific notation
'abc'NULLInvalid format
'2147483648'NULLOverflow
'-2147483649'NULLOverflow

boolから

trueは1に変換され、falseは0に変換されます。

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

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

integerからintegerへ

任意のinteger型間の変換をサポートします。

Strict mode

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

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

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

BigintintComment
21474836472147483647
2147483648ErrorOverflow
-2147483649ErrorOverflow

Non-strict mode

Behavior Change

Since version 4.0, the result of overflow is no longer undefined value, but NULL.

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

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

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

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

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

BigintintComment
21474836472147483647
2147483648NULLOverflow
-2147483649NULLOverflow

dateから

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

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

ルール説明

Behavior Change

Since version 4.0, does not support casting date to tinyint and smallint anymore.

  • オーバーフローが確実に発生するため、tinyintとsmallintへのキャストはサポートしません。

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

dateint
2025-03-1420250314

datetimeから

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

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

ルール説明

Behavior Change

Since version 4.0, does not support casting datetime to tinyint, smallint and int anymore.

  • オーバーフローが確実に発生するため、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.51Truncation
1.79769E308ErrorOverflow
InfinityError
NaNError

Non-strict mode

常にnullable型を返します。

ルール説明

Behavior Change

Since version 4.0, the result of overflow is no longer undefined value, but NULL.

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

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

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

float/doubleCast as intComment
1.51Truncation
1.79769E308NULLOverflow
InfinityNULL
-InfinityNULL
NaNNULL

decimalから

四捨五入はサポートしません。

Strict mode

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

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

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

Decimal(18, 6)intcomment
1.6543211Truncation
12345678901.123ErrorOverflow

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.6543211Truncation
12345678901.123NULLOverflow

timeから

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

Strict mode

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

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

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

TimeintComment
00:00:011000000
838:59:58ErrorOverflow

Non-strict mode

Behavior Change

Since version 4.0, the result of overflow is no longer undefined value, but NULL.

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

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

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

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

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

TimeintComment
00:00:011000000
838:59:58NULLOverflow

その他の型

サポートされていません