类型转换函数
数据转换的常见问题
ClickHouse 通常使用 与 C++ 程序相同的行为。
to<type>
函数和 cast 在某些情况下表现不同,例如在 LowCardinality 的情况下: cast 移除 LowCardinality 属性而 to<type>
函数则不这样做。 Nullable 也是如此,这种行为与 SQL 标准不兼容,可以通过 cast_keep_nullable 设置进行更改。
如果某个数据类型的值被转换为更小的数据类型(例如从 Int64
到 Int32
)或在不兼容的数据类型之间(例如从 String
到 Int
),则需注意可能出现的数据丢失。确保仔细检查结果是否符合预期。
示例:
toString
函数的注意事项
toString
函数系列允许在数字、字符串(但不包括固定字符串)、日期和带时间的日期之间进行转换。
所有这些函数接受一个参数。
- 当从字符串转换或到字符串转换时,值使用与 TabSeparated 格式(以及几乎所有其他文本格式)相同的规则进行格式化或解析。如果字符串无法被解析,将抛出异常并取消请求。
- 将日期转换为数字或反之时,日期对应于自 Unix 纪元开始的天数。
- 将带时间的日期转换为数字或反之时,带时间的日期对应于自 Unix 纪元开始的秒数。
DateTime
参数的toString
函数可以接受第二个字符串参数,包含时区名称,例如:Europe/Amsterdam
。在这种情况下,时间将根据指定的时区进行格式化。
toDate
/toDateTime
函数的注意事项
toDate
/toDateTime
函数的日期和日期时间格式定义如下:
作为例外,如果从 UInt32、Int32、UInt64 或 Int64 数字类型转换为 Date,并且数字大于或等于 65536,该数字将被解释为 Unix 时间戳(而不是天数),并舍入到日期。
这允许支持常见的写法 toDate(unix_timestamp)
,否则会出错并需要写出更繁琐的 toDate(toDateTime(unix_timestamp))
。
日期和带时间的日期之间的转换采用自然方式:通过添加空时间或丢弃时间。
数字类型之间的转换使用与 C++ 中不同数字类型之间赋值相同的规则。
示例
查询:
结果:
另见 toUnixTimestamp
函数。
toBool
将输入值转换为 Bool
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或字符串的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值。
- 类型为 Float32/64 的值。
- 字符串
true
或false
(不区分大小写)。
返回值
- 根据对参数的评估返回
true
或false
。 Bool。
示例
查询:
结果:
toInt8
将输入值转换为 Int8
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt8('0xc0fe');
。
如果输入值无法在 Int8 的范围内表示,则会发生溢出或下溢。
这不被视为错误。
例如: SELECT toInt8(128) == -128;
。
返回值
- 8 位整数值。 Int8。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt8OrZero
类似于 toInt8
,该函数将输入值转换为 Int8 类型的值,但在出错时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- 普通 Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt8OrZero('0xc0fe');
。
如果输入值无法在 Int8 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 8 位整数值,否则返回
0
。 Int8。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt8OrNull
类似于 toInt8
,该函数将输入值转换为 Int8 类型的值,但在出错时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt8OrNull('0xc0fe');
。
如果输入值无法在 Int8 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt8OrDefault
类似于 toInt8
,该函数将输入值转换为 Int8 类型的值,但在出错时返回默认值。
如果未传递 default
值,则在出错时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt8OrDefault('0xc0fe', CAST('-1', 'Int8'));
。
如果输入值无法在 Int8 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 8 位整数值,否则返回传递的默认值(如果传递),如果没有则返回
0
。 Int8。
- 该函数使用 向零取整,即截断数值的小数位。
- 默认值的类型应与转换类型相同。
示例
查询:
结果:
另见
toInt16
将输入值转换为 Int16
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt16('0xc0fe');
。
如果输入值无法在 Int16 的范围内表示,则会发生溢出或下溢。
这不被视为错误。
例如: SELECT toInt16(32768) == -32768;
。
返回值
- 16 位整数值。 Int16。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt16OrZero
类似于 toInt16
,该函数将输入值转换为 Int16 类型的值,但在出错时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt16OrZero('0xc0fe');
。
如果输入值无法在 Int16 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 16 位整数值,否则返回
0
。 Int16。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt16OrNull
类似于 toInt16
,该函数将输入值转换为 Int16 类型的值,但在出错时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt16OrNull('0xc0fe');
。
如果输入值无法在 Int16 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt16OrDefault
类似于 toInt16
,该函数将输入值转换为 Int16 类型的值,但在出错时返回默认值。
如果未传递 default
值,则在出错时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt16OrDefault('0xc0fe', CAST('-1', 'Int16'));
。
如果输入值无法在 Int16 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 16 位整数值,否则返回传递的默认值(如果传递),如果没有则返回
0
。 Int16。
- 该函数使用 向零取整,即截断数值的小数位。
- 默认值的类型应与转换类型相同。
示例
查询:
结果:
另见
toInt32
将输入值转换为 Int32
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt32('0xc0fe');
。
如果输入值无法在 Int32 的范围内表示,则结果发生溢出或下溢。
这不被视为错误。
例如: SELECT toInt32(2147483648) == -2147483648;
返回值
- 32 位整数值。 Int32。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt32OrZero
类似于 toInt32
,该函数将输入值转换为 Int32 类型的值,但在出错时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt32OrZero('0xc0fe');
。
如果输入值无法在 Int32 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 32 位整数值,否则返回
0
。 Int32
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt32OrNull
类似于 toInt32
,该函数将输入值转换为 Int32 类型的值,但在出错时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt32OrNull('0xc0fe');
。
如果输入值无法在 Int32 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt32OrDefault
类似于 toInt32
,该函数将输入值转换为 Int32 类型的值,但在出错时返回默认值。
如果未传递 default
值,则在出错时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt32OrDefault('0xc0fe', CAST('-1', 'Int32'));
。
如果输入值无法在 Int32 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 32 位整数值,否则返回传递的默认值(如果传递),如果没有则返回
0
。 Int32。
- 该函数使用 向零取整,即截断数值的小数位。
- 默认值的类型应与转换类型相同。
示例
查询:
结果:
另见
toInt64
将输入值转换为 Int64
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
不支持的类型:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt64('0xc0fe');
。
如果输入值无法在 Int64 的范围内表示,则结果发生溢出或下溢。
这不被视为错误。
例如: SELECT toInt64(9223372036854775808) == -9223372036854775808;
返回值
- 64 位整数值。 Int64。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt64OrZero
类似于 toInt64
,该函数将输入值转换为 Int64 类型的值,但在出错时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt64OrZero('0xc0fe');
。
如果输入值无法在 Int64 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 64 位整数值,否则返回
0
。 Int64。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt64OrNull
类似于 toInt64
,该函数将输入值转换为 Int64 类型的值,但在出错时返回 NULL
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt64OrNull('0xc0fe');
。
如果输入值无法在 Int64 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt64OrDefault
类似于 toInt64
,该函数将输入值转换为 Int64 类型的值,但在出错时返回默认值。
如果未传递 default
值,则在出错时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt64OrDefault('0xc0fe', CAST('-1', 'Int64'));
。
如果输入值无法在 Int64 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 64 位整数值,否则返回传递的默认值(如果传递),如果没有则返回
0
。 Int64。
- 该函数使用 向零取整,即截断数值的小数位。
- 默认值的类型应与转换类型相同。
示例
查询:
结果:
另见
toInt128
将输入值转换为 Int128
类型的值。如有错误,则抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或其字符串表示。
- 类型为 Float32/64 的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt128('0xc0fe');
。
如果输入值无法在 Int128 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 128 位整数值。 Int128。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt128OrZero
类似于 toInt128
,该函数将输入值转换为 Int128 类型的值,但在出错时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt128OrZero('0xc0fe');
。
如果输入值无法在 Int128 的范围内表示,则会发生溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 128 位整数值,否则返回
0
。 Int128。
该函数使用 向零取整,即截断数值的小数位。
示例
查询:
结果:
另见
toInt128OrDefault
像 toInt128
,这个函数将输入值转换为 Int128 类型的值,但在发生错误时返回默认值。
如果未传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256。
- Float32/64。
- (U)Int8/16/32/128/256 的字符串表示。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt128OrDefault('0xc0fe', CAST('-1', 'Int128'));
。
如果输入值无法在 Int128 的范围内表示,则结果超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 128 位整数值;否则,如果传递了默认值,则返回默认值,如果没有,则返回
0
。 Int128。
- 该函数使用 向零取整,这意味着它会截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toInt256
将输入值转换为 Int256
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt256('0xc0fe');
。
如果输入值无法在 Int256 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 256 位整数值。 Int256。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toInt256OrZero
像 toInt256
,这个函数将输入值转换为 Int256 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt256OrZero('0xc0fe');
。
如果输入值无法在 Int256 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 256 位整数值,否则返回
0
。 Int256。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toInt256OrNull
像 toInt256
,这个函数将输入值转换为 Int256 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt256OrNull('0xc0fe');
。
如果输入值无法在 Int256 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toInt256OrDefault
像 toInt256
,这个函数将输入值转换为 Int256 类型的值,但在发生错误时返回默认值。
如果未传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt256OrDefault('0xc0fe', CAST('-1', 'Int256'));
。
如果输入值无法在 Int256 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 256 位整数值;否则,如果传递了默认值,则返回默认值,如果没有,则返回
0
。 Int256。
- 该函数使用 向零取整,这意味着它会截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt8
将输入值转换为 UInt8
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt8('0xc0fe');
。
如果输入值无法在 UInt8 的范围内表示,则结果会超出或不足。
这不被视为错误。
例如:SELECT toUInt8(256) == 0;
。
返回值
- 8 位无符号整数值。 UInt8。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt8OrZero
像 toUInt8
,这个函数将输入值转换为 UInt8 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- 普通 Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt8OrZero('0xc0fe');
。
如果输入值无法在 UInt8 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 8 位无符号整数值,否则返回
0
。 UInt8。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt8OrNull
像 toUInt8
,这个函数将输入值转换为 UInt8 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt8OrNull('0xc0fe');
。
如果输入值无法在 UInt8 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt8OrDefault
像 toUInt8
,这个函数将输入值转换为 UInt8 类型的值,但在发生错误时返回默认值。
如果未传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt8OrDefault('0xc0fe', CAST('0', 'UInt8'));
。
如果输入值无法在 UInt8 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 8 位无符号整数值;否则,如果传递了默认值,则返回默认值,如果没有,则返回
0
。 UInt8。
- 该函数使用 向零取整,这意味着它会截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt16
将输入值转换为 UInt16
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt16('0xc0fe');
。
如果输入值无法在 UInt16 的范围内表示,则结果会超出或不足。
这不被视为错误。
例如:SELECT toUInt16(65536) == 0;
。
返回值
- 16 位无符号整数值。 UInt16。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt16OrZero
像 toUInt16
,这个函数将输入值转换为 UInt16 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt16OrZero('0xc0fe');
。
如果输入值无法在 UInt16 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 16 位无符号整数值,否则返回
0
。 UInt16。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt16OrNull
像 toUInt16
,这个函数将输入值转换为 UInt16 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt16OrNull('0xc0fe');
。
如果输入值无法在 UInt16 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt16OrDefault
像 toUInt16
,这个函数将输入值转换为 UInt16 类型的值,但在发生错误时返回默认值。
如果未传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt16OrDefault('0xc0fe', CAST('0', 'UInt16'));
。
如果输入值无法在 UInt16 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 16 位无符号整数值;否则,如果传递了默认值,则返回默认值,如果没有,则返回
0
。 UInt16。
- 该函数使用 向零取整,这意味着它会截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt32
将输入值转换为 UInt32
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt32('0xc0fe');
。
如果输入值无法在 UInt32 的范围内表示,则结果会超出或不足。
这不被视为错误。
例如:SELECT toUInt32(4294967296) == 0;
返回值
- 32 位无符号整数值。 UInt32。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt32OrZero
像 toUInt32
,这个函数将输入值转换为 UInt32 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt32OrZero('0xc0fe');
。
如果输入值无法在 UInt32 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 32 位无符号整数值,否则返回
0
。 UInt32
该函数使用 向零取整 ,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt32OrNull
像 toUInt32
,这个函数将输入值转换为 UInt32 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt32OrNull('0xc0fe');
。
如果输入值无法在 UInt32 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
该函数使用 向零取整 ,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt32OrDefault
像 toUInt32
,这个函数将输入值转换为 UInt32 类型的值,但在发生错误时返回默认值。
如果未传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt32OrDefault('0xc0fe', CAST('0', 'UInt32'));
。
如果输入值无法在 UInt32 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 32 位无符号整数值;否则,如果传递了默认值,则返回默认值,如果没有,则返回
0
。 UInt32。
- 该函数使用 向零取整,这意味着它会截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt64
将输入值转换为 UInt64
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的类型:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt64('0xc0fe');
。
如果输入值无法在 UInt64 的范围内表示,则结果会超出或不足。
这不被视为错误。
例如:SELECT toUInt64(18446744073709551616) == 0;
返回值
- 64 位无符号整数值。 UInt64。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt64OrZero
像 toUInt64
,这个函数将输入值转换为 UInt64 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt64OrZero('0xc0fe');
。
如果输入值无法在 UInt64 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
- 如果成功,返回 64 位无符号整数值,否则返回
0
。 UInt64。
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt64OrNull
像 toUInt64
,这个函数将输入值转换为 UInt64 类型的值,但在发生错误时返回 NULL
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt64OrNull('0xc0fe');
。
如果输入值无法在 UInt64 的范围内表示,则结果会超出或不足。 这不被视为错误。
返回值
该函数使用 向零取整,这意味着它会截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt64OrDefault
与 toUInt64
类似,此函数将输入值转换为 UInt64 类型的值,但在发生错误时返回默认值。
如果不传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt64OrDefault('0xc0fe', CAST('0', 'UInt64'));
。
如果输入值不能在 UInt64 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 64 位无符号整数值;否则如果传递了默认值则返回默认值,否则返回
0
。 UInt64。
- 此函数使用 向零舍入,意味着它截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt128
将输入值转换为 UInt128 类型的值。发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt128('0xc0fe');
。
如果输入值不能在 UInt128 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 128 位无符号整数值。 UInt128。
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt128OrZero
与 toUInt128
类似,此函数将输入值转换为 UInt128 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt128OrZero('0xc0fe');
。
如果输入值不能在 UInt128 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 128 位无符号整数值,否则返回
0
。 UInt128。
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt128OrNull
与 toUInt128
类似,此函数将输入值转换为 UInt128 类型的值,但在发生错误时返回 NULL
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt128OrNull('0xc0fe');
。
如果输入值不能在 UInt128 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt128OrDefault
与 toUInt128
类似,此函数将输入值转换为 UInt128 类型的值,但在发生错误时返回默认值。
如果不传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256。
- Float32/64。
- (U)Int8/16/32/128/256 的字符串表示。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt128OrDefault('0xc0fe', CAST('0', 'UInt128'));
。
如果输入值不能在 UInt128 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 128 位无符号整数值,否则如果传递了默认值则返回默认值,否则返回
0
。 UInt128。
- 此函数使用 向零舍入,意味着它截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toUInt256
将输入值转换为 UInt256 类型的值。发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
不支持的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt256('0xc0fe');
。
如果输入值不能在 UInt256 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 256 位无符号整数值。 Int256。
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt256OrZero
与 toUInt256
类似,此函数将输入值转换为 UInt256 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt256OrZero('0xc0fe');
。
如果输入值不能在 UInt256 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 256 位无符号整数值,否则返回
0
。 UInt256。
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt256OrNull
与 toUInt256
类似,此函数将输入值转换为 UInt256 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt256OrNull('0xc0fe');
。
如果输入值不能在 UInt256 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
此函数使用 向零舍入,意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toUInt256OrDefault
与 toUInt256
类似,此函数将输入值转换为 UInt256 类型的值,但在发生错误时返回默认值。
如果不传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值或字符串表示。
- Float32/64 类型的值。
返回默认值的参数:
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toUInt256OrDefault('0xc0fe', CAST('0', 'UInt256'));
。
如果输入值不能在 UInt256 的范围内表示,则结果会溢出或下溢。 这不被视为错误。
返回值
- 如果成功,则返回 256 位无符号整数值,否则如果传递了默认值则返回默认值,否则返回
0
。 UInt256。
- 此函数使用 向零舍入,意味着它截断数字的小数位。
- 默认值类型应与转换类型相同。
示例
查询:
结果:
另请参见
toFloat32
将输入值转换为 Float32 类型的值。发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值。
- (U)Int8/16/32/128/256 的字符串表示。
- Float32/64 类型的值,包括
NaN
和Inf
。 - Float32/64 的字符串表示,包括
NaN
和Inf
(不区分大小写)。
不支持的参数:
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat32('0xc0fe');
。
返回值
- 32 位浮点值。 Float32。
示例
查询:
结果:
另请参见
toFloat32OrZero
与 toFloat32
类似,此函数将输入值转换为 Float32 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256、Float32/64 的字符串表示。
不支持的参数(返回 0
):
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat32OrZero('0xc0fe');
。
返回值
- 如果成功,则返回 32 位浮点值,否则返回
0
。 Float32。
示例
查询:
结果:
另请参见
toFloat32OrNull
与 toFloat32
类似,此函数将输入值转换为 Float32 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256、Float32/64 的字符串表示。
不支持的参数(返回 \N
):
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat32OrNull('0xc0fe');
。
返回值
- 如果成功,则返回 32 位浮点值,否则返回
\N
。 Float32。
示例
查询:
结果:
另请参见
toFloat32OrDefault
与 toFloat32
类似,此函数将输入值转换为 Float32 类型的值,但在发生错误时返回默认值。
如果不传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值。
- (U)Int8/16/32/128/256 的字符串表示。
- Float32/64 类型的值,包括
NaN
和Inf
。 - Float32/64 的字符串表示,包括
NaN
和Inf
(不区分大小写)。
返回默认值的参数:
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat32OrDefault('0xc0fe', CAST('0', 'Float32'));
。
返回值
- 如果成功,则返回 32 位浮点值,否则如果传递了默认值则返回默认值,否则返回
0
。 Float32。
示例
查询:
结果:
另请参见
toFloat64
将输入值转换为 Float64 类型的值。发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值。
- (U)Int8/16/32/128/256 的字符串表示。
- Float32/64 类型的值,包括
NaN
和Inf
。 - Float32/64 的字符串表示,包括
NaN
和Inf
(不区分大小写)。
不支持的参数:
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat64('0xc0fe');
。
返回值
- 64 位浮点值。 Float64。
示例
查询:
结果:
另请参见
toFloat64OrZero
与 toFloat64
类似,此函数将输入值转换为 Float64 类型的值,但在发生错误时返回 0
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256、Float32/64 的字符串表示。
不支持的参数(返回 0
):
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat64OrZero('0xc0fe');
。
返回值
- 如果成功,则返回 64 位浮点值,否则返回
0
。 Float64。
示例
查询:
结果:
另请参见
toFloat64OrNull
与 toFloat64
类似,此函数将输入值转换为 Float64 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- (U)Int8/16/32/128/256、Float32/64 的字符串表示。
不支持的参数(返回 \N
):
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat64OrNull('0xc0fe');
。
返回值
- 如果成功,则返回 64 位浮点值,否则返回
\N
。 Float64。
示例
查询:
结果:
另请参见
toFloat64OrDefault
与 toFloat64
类似,此函数将输入值转换为 Float64 类型的值,但在发生错误时返回默认值。
如果不传递 default
值,则在发生错误时返回 0
。
语法
参数
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值。
- (U)Int8/16/32/128/256 的字符串表示。
- Float32/64 类型的值,包括
NaN
和Inf
。 - Float32/64 的字符串表示,包括
NaN
和Inf
(不区分大小写)。
返回默认值的参数:
- 二进制和十六进制值的字符串表示,例如
SELECT toFloat64OrDefault('0xc0fe', CAST('0', 'Float64'));
。
返回值
- 如果成功,则返回 64 位浮点值,否则如果传递了默认值则返回默认值,否则返回
0
。 Float64。
示例
查询:
结果:
另请参见
toBFloat16
将输入值转换为 BFloat16 类型的值。发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 表达式。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的值。
- (U)Int8/16/32/128/256 的字符串表示。
- Float32/64 类型的值,包括
NaN
和Inf
。 - Float32/64 的字符串表示,包括
NaN
和Inf
(不区分大小写)。
返回值
- 16 位脑浮点值。 BFloat16。
示例
另请参见
toBFloat16OrZero
将字符串输入值转换为 BFloat16 类型的值。 如果字符串不表示浮点值,则函数返回零。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- 数字值的字符串表示。
不支持的参数(返回 0
):
- 二进制和十六进制值的字符串表示。
- 数值。
返回值
- 16 位脑浮点值,否则返回
0
。 BFloat16。
该函数在从字符串表示转换时允许精度的无声丢失。
示例
另请参见
toBFloat16OrNull
将字符串输入值转换为 BFloat16 类型的值。
但如果字符串不表示浮点值,则函数返回 NULL
。
语法
参数
x
— 数字的字符串表示。 字符串。
支持的参数:
- 数字值的字符串表示。
不支持的参数(返回 NULL
):
- 二进制和十六进制值的字符串表示。
- 数值。
返回值
- 16 位脑浮点值,否则返回
NULL
(\N
)。 BFloat16。
该函数在从字符串表示转换时允许精度的无声丢失。
示例
另请参见
toDate
将参数转换为 Date 数据类型。
如果参数是 DateTime 或 DateTime64,则会截断并保留 DateTime 的日期部分:
如果参数是 字符串,则会被解析为 Date 或 DateTime。如果被解析为 DateTime,则使用日期部分:
如果参数是一个数字,并且看起来像 UNIX 时间戳(大于 65535),则会被解释为 DateTime,然后在当前时区截断为 Date。时区参数可以作为函数的第二个参数指定。对 Date 的截断依赖于时区:
上面的示例演示了同一个 UNIX 时间戳如何在不同的时区中被解释为不同的日期。
如果参数是一个数字,并且小于 65536,则被解释为自 1970-01-01(第一个 UNIX 日)以来的天数,并转换为 Date。这对应于 Date
数据类型的内部数值表示。示例:
此转换不依赖于时区。
如果参数不适合 Date 类型的范围,则会导致实现定义的行为,可能饱和到支持的最大日期或溢出:
函数 toDate
也可以以替代形式编写:
toDateOrZero
与 toDate 相同,但如果接收到无效参数,则返回 Date 的下边界。仅支持 字符串 参数。
示例
查询:
结果:
toDateOrNull
与 toDate 相同,但如果接收到无效参数,则返回 NULL
。仅支持 字符串 参数。
示例
查询:
结果:
toDateOrDefault
与 toDate 类似,但如果不成功,则返回默认值,该值是第二个参数(如果指定),否则是 Date 的下边界。
语法
示例
查询:
结果:
toDateTime
将输入值转换为 DateTime。
语法
参数
如果 expr
是一个数字,则被解释为自 Unix Epoch 开始以来的秒数(作为 Unix 时间戳)。
如果 expr
是 字符串,则可以被解释为 Unix 时间戳或作为日期/带时间的日期的字符串表示。
因此,短数字字符串表示(最多 4 位)被显式禁用以避免歧义,例如字符串 '1999'
可能既是年份(不完整的日期/日期时间字符串表示)也可以是一个 Unix 时间戳。允许较长的数字字符串。
返回值
- 日期时间。 DateTime
示例
查询:
结果:
toDateTimeOrZero
与 toDateTime 相同,但如果接收到无效参数,则返回 DateTime 的下边界。仅支持 字符串 参数。
示例
查询:
结果:
toDateTimeOrNull
与 toDateTime 相同,但如果接收到无效参数,则返回 NULL
。仅支持 字符串 参数。
示例
查询:
结果:
toDateTimeOrDefault
与 toDateTime 类似,但如果不成功,则返回默认值,该值是第三个参数(如果指定),否则是 DateTime 的下边界。
语法
示例
查询:
结果:
toDate32
将参数转换为 Date32 数据类型。如果值超出范围,toDate32
返回 Date32 支持的边界值。如果参数具有 Date 类型,则会考虑其边界。
语法
参数
返回值
- 日历日期。 类型 Date32。
示例
- 值在范围内:
- 值超出范围:
- 使用 Date 参数:
toDate32OrZero
与 toDate32 相同,但如果接收到无效参数,则返回 Date32 的最小值。
示例
查询:
结果:
toDate32OrNull
与 toDate32 相同,但如果接收到无效参数,则返回 NULL
。
示例
查询:
结果:
toDate32OrDefault
将参数转换为 Date32 数据类型。如果值超出范围,toDate32OrDefault
将返回 Date32 支持的下边界值。如果参数是 Date 类型,则会考虑其边界。如果收到无效参数,将返回默认值。
示例
查询:
结果:
toDateTime64
将输入值转换为 DateTime64 类型的值。
语法
参数
expr
— 值。可以是 String、UInt32、Float 或 DateTime。scale
- Tick 大小(精度):10-precision 秒。有效范围:[0 : 9]。timezone
(可选) - 指定的 DateTime64 对象的时区。
返回值
- 一个日历日期和一天中的时间,具有亚秒精度。 DateTime64。
示例
- 值在范围内:
- 以十进制表示,具有精度:
不带小数点的值仍然被视为 Unix 时间戳(以秒为单位):
- 带
timezone
:
toDateTime64OrZero
类似于 toDateTime64,该函数将输入值转换为 DateTime64 类型的值,但如果收到无效参数,则返回 DateTime64 的最小值。
语法
参数
expr
— 值。可以是 String、UInt32、Float 或 DateTime。scale
- Tick 大小(精度):10-precision 秒。有效范围:[0 : 9]。timezone
(可选) - 指定的 DateTime64 对象的时区。
返回值
- 日历日期和一天中的时间,具有亚秒精度,否则为
DateTime64
的最小值:1970-01-01 01:00:00.000
。 DateTime64。
示例
查询:
结果:
另请参见
toDateTime64OrNull
类似于 toDateTime64,该函数将输入值转换为 DateTime64 类型的值,但如果收到无效参数,则返回 NULL
。
语法
参数
expr
— 值。可以是 String、UInt32、Float 或 DateTime。scale
- Tick 大小(精度):10-precision 秒。有效范围:[0 : 9]。timezone
(可选) - 指定的 DateTime64 对象的时区。
返回值
- 日历日期和一天中的时间,具有亚秒精度,否则返回
NULL
。 DateTime64/NULL。
示例
查询:
结果:
另请参见
toDateTime64OrDefault
类似于 toDateTime64,该函数将输入值转换为 DateTime64 类型的值,但如果收到无效参数,则返回 DateTime64 的默认值或提供的默认值。
语法
参数
expr
— 值。可以是 String、UInt32、Float 或 DateTime。scale
- Tick 大小(精度):10-precision 秒。有效范围:[0 : 9]。timezone
(可选) - 指定的 DateTime64 对象的时区。default
(可选) - 如果收到无效参数,要返回的默认值。DateTime64。
返回值
- 日历日期和一天中的时间,具有亚秒精度,否则返回
DateTime64
的最小值或提供的default
值(如果有)。 DateTime64。
示例
查询:
结果:
另请参见
toDecimal32
将输入值转换为具有 S
精度的 Decimal(9, S)
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。 Expression。S
— 0到9之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或字符串表示。
- 类型为 Float32/64 的值或字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
(不区分大小写)。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal32('0xc0fe', 1);
。
如果 expr
的值超出 Decimal32
的范围,可能会发生溢出:( -1 * 10^(9 - S), 1 * 10^(9 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出的整数部分的位数将导致异常。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal32(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal32('1.15', 2) = 1.15
返回值
- 类型为
Decimal(9, S)
的值。Decimal32(S)。
示例
查询:
结果:
另请参见
toDecimal32OrZero
类似于 toDecimal32
,该函数将输入值转换为 Decimal(9, S) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal32OrZero('0xc0fe', 1);
。
如果 expr
的值超出 Decimal32
的范围,可能会发生溢出:( -1 * 10^(9 - S), 1 * 10^(9 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Decimal(9, S)
的值,否则返回0
,具有S
位小数。Decimal32(S)。
示例
查询:
结果:
另请参见
toDecimal32OrNull
类似于 toDecimal32
,该函数将输入值转换为 Nullable(Decimal(9, S)) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal32OrNull('0xc0fe', 1);
。
如果 expr
的值超出 Decimal32
的范围,可能会发生溢出:( -1 * 10^(9 - S), 1 * 10^(9 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Nullable(Decimal(9, S))
的值,否则返回相同类型的NULL
。Decimal32(S)。
示例
查询:
结果:
另请参见
toDecimal32OrDefault
类似于 toDecimal32
,该函数将输入值转换为 Decimal(9, S) 类型的值,但在发生错误时返回默认值。
语法
参数
expr
— 数字的字符串表示。String。S
— 0 到 9 之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。default
(可选) — 如果解析为类型Decimal32(S)
失败,则返回的默认值。Decimal32(S)。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal32OrDefault('0xc0fe', 1);
。
如果 expr
的值超出 Decimal32
的范围,可能会发生溢出:( -1 * 10^(9 - S), 1 * 10^(9 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal32OrDefault(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal32OrDefault('1.15', 2) = 1.15
返回值
- 如果成功则为类型
Decimal(9, S)
的值,否则返回所传递的默认值或0
(如果没有)。Decimal32(S)。
示例
查询:
结果:
另请参见
toDecimal64
将输入值转换为具有 S
精度的 Decimal(18, S)
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。Expression。S
— 0到18之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或字符串表示。
- 类型为 Float32/64 的值或字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
(不区分大小写)。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal64('0xc0fe', 1);
。
如果 expr
的值超出 Decimal64
的范围,可能会发生溢出:( -1 * 10^(18 - S), 1 * 10^(18 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致异常。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal64(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal64('1.15', 2) = 1.15
返回值
- 类型为
Decimal(18, S)
的值。Decimal64(S)。
示例
查询:
结果:
另请参见
toDecimal64OrZero
类似于 toDecimal64
,该函数将输入值转换为 Decimal(18, S) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal64OrZero('0xc0fe', 1);
。
如果 expr
的值超出 Decimal64
的范围,可能会发生溢出:( -1 * 10^(18 - S), 1 * 10^(18 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Decimal(18, S)
的值,否则返回0
,具有S
位小数。Decimal64(S)。
示例
查询:
结果:
另请参见
toDecimal64OrNull
类似于 toDecimal64
,该函数将输入值转换为 Nullable(Decimal(18, S)) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal64OrNull('0xc0fe', 1);
。
如果 expr
的值超出 Decimal64
的范围,可能会发生溢出:( -1 * 10^(18 - S), 1 * 10^(18 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Nullable(Decimal(18, S))
的值,否则返回相同类型的NULL
。Decimal64(S)。
示例
查询:
结果:
另请参见
toDecimal64OrDefault
类似于 toDecimal64
,该函数将输入值转换为 Decimal(18, S) 类型的值,但在发生错误时返回默认值。
语法
参数
expr
— 数字的字符串表示。String。S
— 0 到 18 之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。default
(可选) — 如果解析为类型Decimal64(S)
失败,则返回的默认值。Decimal64(S)。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal64OrDefault('0xc0fe', 1);
。
如果 expr
的值超出 Decimal64
的范围,可能会发生溢出:( -1 * 10^(18 - S), 1 * 10^(18 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal64OrDefault(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal64OrDefault('1.15', 2) = 1.15
返回值
- 如果成功则为类型
Decimal(18, S)
的值,否则返回所传递的默认值或0
(如果没有)。Decimal64(S)。
示例
查询:
结果:
另请参见
toDecimal128
将输入值转换为具有 S
精度的 Decimal(38, S)
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。Expression。S
— 0到38之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或字符串表示。
- 类型为 Float32/64 的值或字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
(不区分大小写)。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal128('0xc0fe', 1);
。
如果 expr
的值超出 Decimal128
的范围,可能会发生溢出:( -1 * 10^(38 - S), 1 * 10^(38 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致异常。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal128(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal128('1.15', 2) = 1.15
返回值
- 类型为
Decimal(38, S)
的值。Decimal128(S)。
示例
查询:
结果:
另请参见
toDecimal128OrZero
类似于 toDecimal128
,该函数将输入值转换为 Decimal(38, S) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal128OrZero('0xc0fe', 1);
。
如果 expr
的值超出 Decimal128
的范围,可能会发生溢出:( -1 * 10^(38 - S), 1 * 10^(38 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Decimal(38, S)
的值,否则返回0
,具有S
位小数。Decimal128(S)。
示例
查询:
结果:
另请参见
toDecimal128OrNull
类似于 toDecimal128
,该函数将输入值转换为 Nullable(Decimal(38, S)) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal128OrNull('0xc0fe', 1);
。
如果 expr
的值超出 Decimal128
的范围,可能会发生溢出:( -1 * 10^(38 - S), 1 * 10^(38 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Nullable(Decimal(38, S))
的值,否则返回相同类型的NULL
。Decimal128(S)。
示例
查询:
结果:
另请参见
toDecimal128OrDefault
类似于 toDecimal128
,该函数将输入值转换为 Decimal(38, S) 类型的值,但在发生错误时返回默认值。
语法
参数
expr
— 数字的字符串表示。String。S
— 0 到 38 之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。default
(可选) — 如果解析为类型Decimal128(S)
失败,则返回的默认值。Decimal128(S)。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal128OrDefault('0xc0fe', 1);
。
如果 expr
的值超出 Decimal128
的范围,可能会发生溢出:( -1 * 10^(38 - S), 1 * 10^(38 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal128OrDefault(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal128OrDefault('1.15', 2) = 1.15
返回值
- 如果成功则为类型
Decimal(38, S)
的值,否则返回所传递的默认值或0
(如果没有)。Decimal128(S)。
示例
查询:
结果:
另请参见
toDecimal256
将输入值转换为具有 S
精度的 Decimal(76, S)
类型的值。在发生错误时抛出异常。
语法
参数
expr
— 返回数字或数字字符串表示的表达式。Expression。S
— 0到76之间的比例参数,指定数字的分数部分可以拥有多少位数。UInt8。
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的值或字符串表示。
- 类型为 Float32/64 的值或字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
(不区分大小写)。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal256('0xc0fe', 1);
。
如果 expr
的值超出 Decimal256
的范围,可能会发生溢出:( -1 * 10^(76 - S), 1 * 10^(76 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致异常。
在处理 Float32/Float64 输入时,转换会丢弃额外的位数,并可能以意外的方式操作,因为操作是使用浮点指令执行的。
例如:toDecimal256(1.15, 2)
等于 1.14
,因为 1.15 * 100 以浮点方式是 114.99。
您可以使用字符串输入,以便操作使用底层整数类型:toDecimal256('1.15', 2) = 1.15
返回值
- 类型为
Decimal(76, S)
的值。Decimal256(S)。
示例
查询:
结果:
另请参见
toDecimal256OrZero
类似于 toDecimal256
,该函数将输入值转换为 Decimal(76, S) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal256OrZero('0xc0fe', 1);
。
如果 expr
的值超出 Decimal256
的范围,可能会发生溢出:( -1 * 10^(76 - S), 1 * 10^(76 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Decimal(76, S)
的值,否则返回0
,具有S
位小数。Decimal256(S)。
示例
查询:
结果:
另请参见
toDecimal256OrNull
类似于 toDecimal256
,该函数将输入值转换为 Nullable(Decimal(76, S)) 类型的值,但在发生错误时返回 0
。
语法
参数
支持的参数:
- 类型为 (U)Int8/16/32/64/128/256 的字符串表示。
- 类型为 Float32/64 的字符串表示。
不支持的参数:
- 字符串表示的 Float32/64 值
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal256OrNull('0xc0fe', 1);
。
如果 expr
的值超出 Decimal256
的范围,可能会发生溢出:( -1 * 10^(76 - S), 1 * 10^(76 - S) )
。
超出的小数位将被丢弃(不进行四舍五入)。
超出整数部分的位数将导致错误。
返回值
- 如果成功则为类型
Nullable(Decimal(76, S))
的值,否则返回相同类型的NULL
。Decimal256(S)。
示例
查询:
结果:
另请参见
toDecimal256OrDefault
与 toDecimal256
一样,此函数将输入值转换为 Decimal(76, S) 类型的值,但如果发生错误,则返回默认值。
语法
参数
expr
— 数字的字符串表示形式。 String。S
— 范围在 0 和 76 之间的缩放参数,指定数字的小数部分可以有多少位数。 UInt8。default
(可选) — 如果解析为类型Decimal256(S)
失败时,返回的默认值。 Decimal256(S)。
支持的参数:
- (U)Int8/16/32/64/128/256 类型的字符串表示。
- Float32/64 类型的字符串表示。
不支持的参数:
- Float32/64 值的字符串表示
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toDecimal256OrDefault('0xc0fe', 1);
。
如果 expr
的值超出 Decimal256
的边界:( -1 * 10^(76 - S), 1 * 10^(76 - S) ),则可能发生溢出。
小数部分过多的位数会被丢弃(不进行四舍五入)。
整数部分过多的位数会导致错误。
在处理 Float32/Float64 输入时,转换可能会丢掉额外的数字,并可能以意外的方式进行操作,因为操作是使用浮点指令执行的。
例如:toDecimal256OrDefault(1.15, 2)
等于 1.14
,因为在浮点数中 1.15 * 100 为 114.99。
您可以使用字符串输入以便操作使用底层整数类型:toDecimal256OrDefault('1.15', 2) = 1.15
返回值
- 如果成功,则返回类型为
Decimal(76, S)
的值,否则返回传入的默认值或0
(如果未传入默认值)。 Decimal256(S)。
示例
查询:
结果:
另请参阅
toString
将值转换为它们的字符串表示形式。 对于 DateTime 参数,该函数可以接受第二个字符串参数,包含时区的名称。
语法
参数
返回值
- 返回输入值的字符串表示。
String
。
示例
使用示例
toFixedString
将 String 类型的参数转换为 FixedString(N) 类型(固定长度为 N 的字符串)。 如果字符串的字节数少于 N,则使用空字节填充到右侧。如果字符串的字节数超过 N,则抛出异常。
语法
参数
返回值
- 长度为 N 的固定字符串
s
。 FixedString。
示例
查询:
结果:
toStringCutToZero
接受一个字符串或固定字符串参数。返回内容在找到的第一个零字节处被截断的字符串。
语法
示例
查询:
结果:
查询:
结果:
toDecimalString
将数值转换为字符串,并由用户指定输出中的小数位数。
语法
参数
返回值
- 输入值表示为具有给定小数位数(缩放)的 String。 如果请求的缩放小于原始数字的缩放,则数字会根据常规算术进行四舍五入。
示例
查询:
结果:
reinterpretAsUInt8
执行字节重解释,将输入值视为 UInt8 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt8。 UInt8。
示例
查询:
结果:
reinterpretAsUInt16
执行字节重解释,将输入值视为 UInt16 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt16。 UInt16。
示例
查询:
结果:
reinterpretAsUInt32
执行字节重解释,将输入值视为 UInt32 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt32。 UInt32。
示例
查询:
结果:
reinterpretAsUInt64
执行字节重解释,将输入值视为 UInt64 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt64。 UInt64。
示例
查询:
结果:
reinterpretAsUInt128
执行字节重解释,将输入值视为 UInt128 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt128。 UInt128。
示例
查询:
结果:
reinterpretAsUInt256
执行字节重解释,将输入值视为 UInt256 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 UInt256。 UInt256。
示例
查询:
结果:
reinterpretAsInt8
执行字节重解释,将输入值视为 Int8 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int8。 Int8。
示例
查询:
结果:
reinterpretAsInt16
执行字节重解释,将输入值视为 Int16 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int16。 Int16。
示例
查询:
结果:
reinterpretAsInt32
执行字节重解释,将输入值视为 Int32 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int32。 Int32。
示例
查询:
结果:
reinterpretAsInt64
执行字节重解释,将输入值视为 Int64 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int64。 Int64。
示例
查询:
结果:
reinterpretAsInt128
执行字节重解释,将输入值视为 Int128 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int128。 Int128。
示例
查询:
结果:
reinterpretAsInt256
执行字节重解释,将输入值视为 Int256 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Int256。 Int256。
示例
查询:
结果:
reinterpretAsFloat32
执行字节重解释,将输入值视为 Float32 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Float32。 Float32。
示例
查询:
结果:
reinterpretAsFloat64
执行字节重解释,将输入值视为 Float64 类型的值。与 CAST
不同,此函数不试图保留原始值 - 如果目标类型无法表示输入类型,则输出毫无意义。
语法
参数
返回值
- 将值
x
重解释为 Float64。 Float64。
示例
查询:
结果:
reinterpretAsDate
接受字符串、固定字符串或数值并将字节解释为主机顺序(小端)。它从解释的数字返回一个日期,表示自 Unix 纪元开始的天数。
语法
参数
返回值
- 日期。 Date。
实现细节
如果提供的字符串不够长,该函数的工作方式类似于将字符串填充了必要数量的空字节。如果字符串长度超过所需,额外的字节将被忽略。
示例
查询:
结果:
reinterpretAsDateTime
这些函数接受字符串并将放置在字符串开头的字节解释为主机顺序(小端)中的数字。返回一个日期,时间解释为自 Unix 纪元开始的秒数。
语法
参数
返回值
- 日期和时间。 DateTime。
实现细节
如果提供的字符串不够长,该函数的工作方式类似于将字符串填充了必要数量的空字节。如果字符串长度超过所需,额外的字节将被忽略。
示例
查询:
结果:
reinterpretAsString
该函数接受一个数字、日期或带时间的日期,并返回一个包含以主机顺序(小端)表示的相应值的字节的字符串。末尾的空字节被删除。例如,UInt32 类型的值 255 是一个长度为一个字节的字符串。
语法
参数
返回值
- 包含代表
x
的字节的字符串。 String。
示例
查询:
结果:
reinterpretAsFixedString
该函数接受一个数字、日期或带时间的日期,并返回一个 FixedString,包含以主机顺序(小端)表示的相应值的字节。末尾的空字节被删除。例如,UInt32 类型的值 255 是一个长度为一个字节的 FixedString。
语法
参数
返回值
- 包含代表
x
的字节的固定字符串。 FixedString。
示例
查询:
结果:
reinterpretAsUUID
除了这里列出的 UUID 函数,还有专门的 UUID 函数文档。
接受一个 16 字节字符串并返回一个 UUID,通过以小端字节顺序解释每个 8 字节的半部分。如果字符串不够长,该函数的工作方式类似于将字符串填充了必要数量的空字节到末尾。如果字符串长度超过 16 字节,末尾的额外字节将被忽略。
语法
参数
fixed_string
— 大端字节字符串。 FixedString。
返回值
- UUID 类型的值。 UUID。
示例
字符串到 UUID。
查询:
结果:
字符串和 UUID 之间的双向转换。
查询:
结果:
reinterpret
使用 x
值的相同内存字节序列,并将其重新解释为目标类型。
语法
参数
x
— 任何类型。type
— 目标类型。如果它是一个数组,则数组元素类型必须是固定长度类型。
返回值
- 目标类型值。
示例
查询:
结果:
查询:
结果:
CAST
将输入值转换为指定的数据类型。与 reinterpret 函数不同,CAST
尝试使用新数据类型呈现相同的值。如果无法进行转换,则会引发异常。
支持几种语法变体。
语法
参数
x
— 要转换的值。可以是任何类型。T
— 目标数据类型的名称。 String。t
— 目标数据类型。
返回值
- 转换后的值。
如果输入值不符合目标类型的边界,则结果会溢出。例如,CAST(-1, 'UInt8')
返回 255
。
示例
查询:
结果:
查询:
结果:
转换为 FixedString (N) 仅适用于类型为 String 或 FixedString 的参数。
支持转换为 Nullable 的类型以及反向转换。
示例
查询:
结果:
查询:
结果:
另请参阅
accurateCast(x, T)
将 x
转换为 T
数据类型。
与 cast 的不同之处在于,accurateCast
在转换时不允许数值类型溢出,如果类型值 x
不符合类型 T
的边界,则会抛出异常。例如,accurateCast(-1, 'UInt8')
会抛出异常。
示例
查询:
结果:
查询:
结果:
accurateCastOrNull(x, T)
将输入值 x
转换为指定的数据类型 T
。始终返回 Nullable 类型,如果转换值无法在目标类型中表示,则返回 NULL。
语法
参数
x
— 输入值。T
— 返回数据类型的名称。
返回值
- 转换为指定数据类型
T
的值。
示例
查询:
结果:
查询:
结果:
accurateCastOrDefault(x, T[, default_value])
将输入值 x
转换为指定的数据类型 T
。如果转换值无法在目标类型中表示,则返回默认类型值或指定的 default_value
。
语法
参数
x
— 输入值。T
— 返回数据类型的名称。default_value
— 返回数据类型的默认值。
返回值
- 转换为指定数据类型
T
的值。
示例
查询:
结果:
查询:
结果:
toInterval
根据数值和时间间隔单位(例如“秒”或“天”)创建 Interval 数据类型值。
语法
参数
-
unit
— 要创建的时间间隔的类型。 String Literal。 可能的值:nanosecond
microsecond
millisecond
second
minute
hour
day
week
month
quarter
year
unit
参数不区分大小写。
返回值
- 结果间隔。 Interval
示例
toIntervalYear
返回 n 年的数据类型 IntervalYear 的间隔。
语法
参数
返回值
- n 年的间隔。 IntervalYear。
示例
查询:
结果:
toIntervalQuarter
返回 n 季度的数据类型 IntervalQuarter 的间隔。
语法
参数
返回值
- n 季度的间隔。 IntervalQuarter。
示例
查询:
结果:
toIntervalMonth
返回 n 个月的数据类型 IntervalMonth 的间隔。
语法
参数
返回值
- n 个月的间隔。 IntervalMonth。
示例
查询:
结果:
toIntervalWeek
返回 n 周的数据类型 IntervalWeek 的间隔。
语法
参数
返回值
- n 周的间隔。 IntervalWeek。
示例
查询:
结果:
toIntervalDay
返回 n 天的数据类型 IntervalDay 的间隔。
语法
参数
返回值
- n 天的间隔。 IntervalDay。
示例
查询:
结果:
toIntervalHour
返回 n 小时的数据类型 IntervalHour 的间隔。
语法
参数
返回值
- n 小时的间隔。 IntervalHour。
示例
查询:
结果:
toIntervalMinute
返回 n 分钟的数据类型 IntervalMinute 的间隔。
语法
参数
返回值
- n 分钟的间隔。 IntervalMinute。
示例
查询:
结果:
toIntervalSecond
返回 n 秒的数据类型 IntervalSecond 的间隔。
语法
参数
返回值
- n 秒的间隔。 IntervalSecond。
示例
查询:
结果:
toIntervalMillisecond
返回 n 毫秒的数据类型 IntervalMillisecond 的间隔。
语法
参数
返回值
- n 毫秒的间隔。 IntervalMilliseconds。
示例
查询:
结果:
toIntervalMicrosecond
返回 n
微秒的间隔,数据类型为 IntervalMicrosecond。
语法
参数
返回值
n
微秒的间隔。 IntervalMicrosecond。
示例
查询:
结果:
toIntervalNanosecond
返回 n
纳秒的间隔,数据类型为 IntervalNanosecond。
语法
参数
返回值
n
纳秒的间隔。 IntervalNanosecond。
示例
查询:
结果:
parseDateTime
将 String 转换为 DateTime,格式遵循 MySQL 格式字符串。
此函数是 formatDateTime 的反操作。
语法
参数
str
— 要解析的字符串format
— 格式字符串。可选。如果未指定,则为%Y-%m-%d %H:%i:%s
。timezone
— 时区。可选。
返回值
返回从输入字符串解析得到的 DateTime 值,格式符合 MySQL 风格的格式字符串。
支持的格式说明符
所有在 formatDateTime 中列出的格式说明符,除了:
- %Q:季度 (1-4)
示例
别名:TO_TIMESTAMP
。
parseDateTimeOrZero
与 parseDateTime 相同,除了当遇到无法处理的日期格式时返回零日期。
parseDateTimeOrNull
与 parseDateTime 相同,除了当遇到无法处理的日期格式时返回 NULL
。
别名:str_to_date
。
parseDateTimeInJodaSyntax
类似于 parseDateTime,但格式字符串遵循 Joda 而非 MySQL 语法。
此函数是 formatDateTimeInJodaSyntax 的反操作。
语法
参数
str
— 要解析的字符串format
— 格式字符串。可选。如果未指定,则为yyyy-MM-dd HH:mm:ss
。timezone
— 时区。可选。
返回值
返回从输入字符串解析得到的 DateTime 值,格式符合 Joda 风格的格式字符串。
支持的格式说明符
所有在 formatDateTimeInJodaSyntax
中列出的格式说明符均受支持,除了:
- S:秒的分数
- z:时区
- Z:时区偏移/标识符
示例
parseDateTimeInJodaSyntaxOrZero
与 parseDateTimeInJodaSyntax 相同,除了当遇到无法处理的日期格式时返回零日期。
parseDateTimeInJodaSyntaxOrNull
与 parseDateTimeInJodaSyntax 相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTime64
将 String 转换为 DateTime64,格式遵循 MySQL 格式字符串。
语法
参数
str
— 要解析的字符串。format
— 格式字符串。可选。如果未指定,则为%Y-%m-%d %H:%i:%s.%f
。timezone
— 时区。可选。
返回值
返回从输入字符串解析得到的 DateTime64 值,格式符合 MySQL 风格的格式字符串。 返回值的精度为 6。
parseDateTime64OrZero
与 parseDateTime64 相同,除了当遇到无法处理的日期格式时返回零日期。
parseDateTime64OrNull
与 parseDateTime64 相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTime64InJodaSyntax
将 String 转换为 DateTime64,格式遵循 Joda 格式字符串。
语法
参数
str
— 要解析的字符串。format
— 格式字符串。可选。如果未指定,则为yyyy-MM-dd HH:mm:ss
。timezone
— 时区。可选。
返回值
返回从输入字符串解析得到的 DateTime64 值,格式符合 Joda 风格的格式字符串。
返回值的精度等于格式字符串中 S
占位符的数量(但最多为 6)。
parseDateTime64InJodaSyntaxOrZero
与 parseDateTime64InJodaSyntax 相同,除了当遇到无法处理的日期格式时返回零日期。
parseDateTime64InJodaSyntaxOrNull
与 parseDateTime64InJodaSyntax 相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTimeBestEffort
parseDateTime32BestEffort
将 String 表示的日期和时间转换为 DateTime 数据类型。
该函数解析 ISO 8601、RFC 1123 - 5.2.14 RFC-822 日期和时间规范、ClickHouse 的一些其他日期和时间格式。
语法
参数
支持的非标准格式
- 一个包含 9..10 位的 unix 时间戳 的字符串。
- 一个带有日期和时间组件的字符串:
YYYYMMDDhhmmss
、DD/MM/YYYY hh:mm:ss
、DD-MM-YY hh:mm
、YYYY-MM-DD hh:mm:ss
等。 - 一个仅带有日期的字符串:
YYYY
、YYYYMM
、YYYY*MM
、DD/MM/YYYY
、DD-MM-YY
等。 - 一个带有日期和时间的字符串:
DD
、DD hh
、DD hh:mm
。在这种情况下,MM
被替换为01
。 - 一个包含日期和时间以及时区偏移信息的字符串:
YYYY-MM-DD hh:mm:ss ±h:mm
等。例如,2020-12-12 17:36:00 -5:00
。 - 一个 syslog 时间戳:
Mmm dd hh:mm:ss
。例如,Jun 9 14:20:32
。
对于所有带分隔符的格式,该函数解析月份名称,以其全名或月份名称的前三个字母表示。例如: 24/DEC/18
、24-Dec-18
、01-September-2018
。
如果年份未指定,则默认为当前年份。如果结果日期时间恰好在未来(即使是比当前时刻晚一秒),则将当前年份替换为前一年。
返回值
- 将
time_string
转换为 DateTime 数据类型。
示例
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
参见
parseDateTimeBestEffortUS
此函数的行为类似于 parseDateTimeBestEffort,对于 ISO 日期格式,例如 YYYY-MM-DD hh:mm:ss
和其他可以明确提取月份和日期组件的日期格式,例如 YYYYMMDDhhmmss
、YYYY-MM
、DD hh
或 YYYY-MM-DD hh:mm:ss ±h:mm
。如果无法明确提取月份和日期组件,例如 MM/DD/YYYY
、MM-DD-YYYY
或 MM-DD-YY
,则优先采用美国日期格式,而不是 DD/MM/YYYY
、DD-MM-YYYY
或 DD-MM-YY
。作为对后者的例外,如果月份大于 12 且小于或等于 31,则该函数将回落到 parseDateTimeBestEffort 的行为,例如, 15/08/2020
被解析为 2020-08-15
。
parseDateTimeBestEffortOrNull
parseDateTime32BestEffortOrNull
与 parseDateTimeBestEffort 相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTimeBestEffortOrZero
parseDateTime32BestEffortOrZero
与 parseDateTimeBestEffort 相同,除了当遇到无法处理的日期格式时返回零日期或零日期时间。
parseDateTimeBestEffortUSOrNull
与 parseDateTimeBestEffortUS 函数相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTimeBestEffortUSOrZero
与 parseDateTimeBestEffortUS 函数相同,除了当遇到无法处理的日期格式时返回零日期(1970-01-01
)或零日期时间(1970-01-01 00:00:00
)。
parseDateTime64BestEffort
与 parseDateTimeBestEffort 函数相同,但还解析毫秒和微秒并返回 DateTime 数据类型。
语法
参数
time_string
— 包含要转换的日期或带时间的日期字符串。 String。precision
— 所需精度。3
— 表示毫秒,6
— 表示微秒。默认值为3
。可选。 UInt8。time_zone
— 时区。该函数根据时区解析time_string
。可选。 String。
返回值
- 将
time_string
转换为 DateTime 数据类型。
示例
查询:
结果:
parseDateTime64BestEffortUS
与 parseDateTime64BestEffort 相同,但在模糊情况下,该函数优先采用美国日期格式(MM/DD/YYYY
等)。
parseDateTime64BestEffortOrNull
与 parseDateTime64BestEffort 相同,除了当遇到无法处理的日期格式时返回 NULL
。
parseDateTime64BestEffortOrZero
与 parseDateTime64BestEffort 相同,除了当遇到无法处理的日期格式时返回零日期或零日期时间。
parseDateTime64BestEffortUSOrNull
与 parseDateTime64BestEffort 相同,除了在模糊情况下,该函数优先采用美国日期格式(MM/DD/YYYY
等)并在遇到无法处理的日期格式时返回 NULL
。
parseDateTime64BestEffortUSOrZero
与 parseDateTime64BestEffort 相同,除了在模糊情况下,该函数优先采用美国日期格式(MM/DD/YYYY
等)并在遇到无法处理的日期格式时返回零日期或零日期时间。
toLowCardinality
将输入参数转换为相同数据类型的 LowCardinality 版本。
要将数据从 LowCardinality
数据类型转换,使用 CAST 函数。例如, CAST(x as String)
。
语法
参数
返回值
expr
的结果。 LowCardinality 类型。
示例
查询:
结果:
toUnixTimestamp
将 String
、Date
或 DateTime
转换为 Unix 时间戳(自 1970-01-01 00:00:00 UTC
起的秒数),返回 UInt32
。
语法
参数
date
:要转换的值。Date
或Date32
或DateTime
或DateTime64
或String
。timezone
:可选。用于转换的时区。如果未指定,则使用服务器的时区。String
返回值
返回 Unix 时间戳。 UInt32
示例
用法示例
toUnixTimestamp64Second
将 DateTime64
转换为具有固定秒精度的 Int64
值。根据其精度适当缩放输入值。
输出值为 UTC 中的时间戳,而不是 DateTime64
的时区。
语法
参数
value
— 具有任意精度的 DateTime64 值。 DateTime64。
返回值
- 将
value
转换为Int64
数据类型。 Int64。
示例
查询:
结果:
toUnixTimestamp64Milli
将 DateTime64
转换为具有固定毫秒精度的 Int64
值。根据其精度适当缩放输入值。
输出值为 UTC 中的时间戳,而不是 DateTime64
的时区。
语法
参数
value
— 具有任意精度的 DateTime64 值。 DateTime64。
返回值
- 将
value
转换为Int64
数据类型。 Int64。
示例
查询:
结果:
toUnixTimestamp64Micro
将 DateTime64
转换为具有固定微秒精度的 Int64
值。根据其精度适当缩放输入值。
输出值为 UTC 中的时间戳,而不是 DateTime64
的时区。
语法
参数
value
— 具有任意精度的 DateTime64 值。 DateTime64。
返回值
- 将
value
转换为Int64
数据类型。 Int64。
示例
查询:
结果:
toUnixTimestamp64Nano
将 DateTime64
转换为具有固定纳秒精度的 Int64
值。根据其精度适当缩放输入值。
输出值为 UTC 中的时间戳,而不是 DateTime64
的时区。
语法
参数
value
— 具有任意精度的 DateTime64 值。 DateTime64。
返回值
- 将
value
转换为Int64
数据类型。 Int64。
示例
查询:
结果:
fromUnixTimestamp64Second
将 Int64
转换为具有固定秒精度的 DateTime64
值,支持可选的时区。根据其精度适当缩放输入值。
请注意,输入值被视为 UTC 时间戳,而不是给定(或隐含)时区的时间戳。
语法
参数
返回值
- 将
value
转换为精度为0
的 DateTime64。 DateTime64。
示例
查询:
结果:
fromUnixTimestamp64Milli
将 Int64
转换为具有固定毫秒精度的 DateTime64
值,支持可选的时区。根据其精度适当缩放输入值。
请注意,输入值被视为 UTC 时间戳,而不是给定(或隐含)时区的时间戳。
语法
参数
返回值
- 将
value
转换为精度为3
的 DateTime64。 DateTime64。
示例
查询:
结果:
fromUnixTimestamp64Micro
将 Int64
转换为具有固定微秒精度的 DateTime64
值,支持可选的时区。根据其精度适当缩放输入值。
请注意,输入值被视为 UTC 时间戳,而不是给定(或隐含)时区的时间戳。
语法
参数
返回值
- 将
value
转换为精度为6
的 DateTime64。 DateTime64。
示例
查询:
结果:
fromUnixTimestamp64Nano
将 Int64
转换为具有固定纳秒精度的 DateTime64
值,支持可选的时区。根据其精度适当缩放输入值。
请注意,输入值被视为 UTC 时间戳,而不是给定(或隐含)时区的时间戳。
语法
参数
返回值
- 将
value
转换为精度为9
的 DateTime64。 DateTime64。
示例
查询:
结果:
formatRow
将任意表达式通过给定格式转换为字符串。
语法
参数
返回值
- 格式化后的字符串。(对于文本格式,通常以换行符结束)。
示例
查询:
结果:
注意:如果格式包含后缀/前缀,它将在每一行中写入。
示例
查询:
结果:
注意:该函数仅支持基于行的格式。
formatRowNoNewline
将任意表达式通过给定格式转换为字符串。与 formatRow 的不同之处在于,此函数在存在的情况下会修剪最后一个 \n
。
语法
参数
返回值
- 格式化后的字符串。
示例
查询:
结果: