Skip to content

类型转换函数

数值类型转换常见的问题

当你把一个值从一个类型转换为另外一个类型的时候,你需要注意的是这是一个不安全的操作,可能导致数据的丢失。数据丢失一般发生在你将一个大的数据类型转换为小的数据类型的时候,或者你把两个不同的数据类型相互转换的时候。

to_int(8|16|32|64)

转换一个输入值为Int类型。这个函数包括:

  • to_int8(expr) — 结果为Int8数据类型。
  • to_int16(expr) — 结果为Int16数据类型。
  • to_int32(expr) — 结果为Int32数据类型。
  • to_int64(expr) — 结果为Int64数据类型。

参数

  • expr — 表达式返回一个数字或者代表数值类型的字符串。不支持二进制、八进制、十六进制的数字形式,有效数字之前的 0 也会被忽略。

返回值

整形在Int8, Int16, Int32,或者 Int64 的数据类型。

函数使用rounding towards zero原则,这意味着会截断丢弃小数部分的数值。

例子

sql
SELECT to_int64("nan"), to_int32(32), to_int16('16'), to_int8(8.8)
text
┌──to_int64("nan")─────┬─to_int32(32)─┬─to_int16('16')─┬─to_int8(8.8)─┐
│ -9223372036854775808 │          32  │             16 │            8 │
└──────────────────────┴──────────────┴────────────────┴──────────────┘

to_int(8|16|32|64)_or_zero

这个函数需要一个字符类型的入参,然后尝试把它转为Int (8 | 16 | 32 | 64),如果转换失败直接返回 0。

例子

sql
select to_int64_or_zero('123123'), to_int8_or_zero('123qwe123')
text
┌─to_int64_or_zero('123123')─┬─to_int8_or_zero('123qwe123')─┐
│                     123123 │                            0 │
└────────────────────────────┴──────────────────────────────┘

to_int(8|16|32|64)_or_null

这个函数需要一个字符类型的入参,然后尝试把它转为Int (8 | 16 | 32 | 64),如果转换失败直接返回NULL

例子

sql
select to_int64_or_null('123123'), to_int8_or_null('123qwe123')
text
┌─to_int64_or_null('123123')─┬─to_int8_or_null('123qwe123')─┐
│                     123123 │                         NULL │
└────────────────────────────┴──────────────────────────────┘