跳到主要内容

转换为 int

From string

严格模式

如果源类型是nullable,返回nullable类型;

如果源类型是非nullable,返回非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"

规则描述

  • 只支持十进制格式的数字;

  • 数字前面可以带有正负符号字符;

  • 字符串允许有任意数量的前缀空格和后缀空格,空格字符包括:' ', '\t', '\n', '\r', '\f', '\v';

  • 不支持科学计数法;

  • 其它格式报错;

  • 数值溢出报错。

例子

字符串Cast as int 结果Comment
"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'报错非法格式
'123.456'报错不支持小数格式
'1.23456e5'报错不支持科学计数法
'2147483648'报错溢出
'-2147483649'报错溢出

非严格模式

始终返回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"

规则描述

  • 支持严格模式下的所有合法格式;

  • 支持严格模式格式后面带有小数部分,转换结果直接把小数部分丢弃;

  • 科学计数法格式转成NULL;

  • 其他格式情况都转成NULL;

  • 溢出的时候转成NULL。

例子

字符串Cast as int 结果Comment
"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溢出

From bool

true转成1,false转成0。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

From integer to integer

支持任意整数类型之间相互转换。

严格模式

溢出时报错。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

例子

BigintintComment
21474836472147483647
2147483648报错溢出
-2147483649报错溢出

非严格模式

行为变更

自 4.0 起,溢出时结果不再是未定义值,而是NULL。

溢出时返回NULL值。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable:

  • 如果可能溢出(比如cast bigint as int),返回nullable类型;

  • 否则返回非nullable类型(比如cast int as bigint)。

例子

BigintintComment
21474836472147483647
2147483648NULL溢出
-2147483649NULL溢出

From date

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

规则描述

行为变更

自 4.0 起,不再支持date类型转换成tinyint和smallint。

  • 不支持cast到tinyint和smallint,因为一定会溢出。

  • 支持cast成int, bigint和largeint。将date的年月日的数字按顺序拼成整数,月、日都当成两位数,不足10的在前面补一个0。

例子

dateint
2025-03-1420250314

From datetime

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

规则描述

行为变更

自 4.0 起,不再支持datetime类型转换成tinyint、smallint和int类型。

  • 不支持cast到tinyint, smallint, int,因为一定会溢出;

  • 支持cast成bigint, largeint。将datetime的microsend部分丢弃,然后将年、月、日、小时、分钟、秒按顺序拼接成一个整数,月、日、小时、分钟、秒都当成两位数,不足10的在前面补一个0。

例子

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

From float/double

不支持四舍五入。

严格模式

规则描述

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

  • 溢出时报错;

  • Inf和NaN值报错。

例子

float/doubleCast as intComment
1.51截断
1.79769E308报错溢出
Infinity报错
NaN报错

非严格模式

始终返回nullable类型。

规则描述

行为变更

自 4.0 起,溢出时结果不再是未定义值,而是NULL。

  • 溢出时转成NULL值;

  • Inf转成NULL值;

  • NaN转成NULL值。

例子

float/doubleCast as intComment
1.51截断
1.79769E308NULL溢出
InfinityNULL
-InfinityNULL
NaNNULL

From decimal

不支持四舍五入。

严格模式

溢出时报错。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

例子

Decimal(18, 6)intcomment
1.6543211截断
12345678901.123报错溢出

非严格模式

溢出时转成NULL值。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable:

  • 如果可能溢出(比如cast decimal(18, 0) as int),返回nullable类型;

  • 否则返回非nullable类型(比如cast decimal(9, 0) as bigint)。

例子

Decimal(18, 6)intcomment
1.6543211截断
12345678901.123NULL溢出

From time

转换为微秒数。

严格模式

溢出时报错。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable,返回非nullable类型。

例子

TimeintComment
00:00:011000000
838:59:58报错溢出

非严格模式

行为变更

自 4.0 起,溢出时结果不再是未定义值,而是NULL。

溢出时转成NULL值。

如果源类型是nullable,返回nullable类型。

如果源类型是非nullable:

  • 如果可能溢出(比如cast time as tinyint),返回nullable类型;

  • 否则返回非nullable类型(比如cast time as bigint)。

例子

TimeintComment
00:00:011000000
838:59:58NULL溢出

其它类型

不支持