类型转换函数
数据转换的常见问题
ClickHouse 通常使用 与 C++ 程序相同的行为。
to<type>
函数和 cast 在某些情况下的行为不同,例如在 LowCardinality 的情况下:cast 会移除 LowCardinality 特性,而 to<type>
函数则不会。 Nullable 也是如此,这种行为与 SQL 标准不兼容,可以通过 cast_keep_nullable 设置进行更改。
如果数据类型的值被转换为较小的数据类型(例如从 Int64
转换为 Int32
)或在不兼容的数据类型之间转换(例如从 String
转换为 Int
),要注意潜在的数据丢失。确保仔细检查结果是否符合预期。
示例:
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
— 数字的字符串表示。String。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- 普通 Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt8OrZero('0xc0fe');
。
如果输入值无法在 Int8 的范围内表示,则会发生结果的溢出或下溢。 这不被视为错误。
返回值
- 如果成功,返回 8 位整数值,否则返回
0
。Int8。
该函数使用 向零舍入,这意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toInt8OrNull
类似于 toInt8
,此函数将输入值转换为 Int8 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。String。
支持的参数:
- (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
— 数字的字符串表示。String。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt16OrZero('0xc0fe');
。
如果输入值无法在 Int16 的范围内表示,则会发生结果的溢出或下溢。 这不被视为错误。
返回值
- 如果成功,返回 16 位整数值,否则返回
0
。Int16。
该函数使用 向零舍入,这意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toInt16OrNull
类似于 toInt16
,此函数将输入值转换为 Int16 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。String。
支持的参数:
- (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
— 数字的字符串表示。String。
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 0
):
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt32OrZero('0xc0fe');
。
如果输入值无法在 Int32 的范围内表示,则会发生结果的溢出或下溢。 这不被视为错误。
返回值
- 如果成功,返回 32 位整数值,否则返回
0
。Int32。
该函数使用 向零舍入,这意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toInt32OrNull
类似于 toInt32
,此函数将输入值转换为 Int32 类型的值,但在发生错误时返回 NULL
。
语法
参数
x
— 数字的字符串表示。String。
支持的参数:
- (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
— 数字的字符串表示。String。
支持的参数:
- (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。
该函数使用 向零舍入,这意味着它截断数字的小数位。
示例
查询:
结果:
另请参见
toInt128OrNull
类似于 toInt128
,此函数将输入值转换为 Int128 类型的值,但在发生错误时返回 NULL
。
语法
参数
支持的参数:
- (U)Int8/16/32/128/256 的字符串表示。
不支持的参数(返回 \N
)
- Float32/64 值的字符串表示,包括
NaN
和Inf
。 - 二进制和十六进制值的字符串表示,例如
SELECT toInt128OrNull('0xc0fe');
。
如果输入值无法在 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。
- (U)Int8/16/32/128/256 的字符串表示。
返回默认值的参数:
- 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
将参数转换为 日期 数据类型。
如果参数为 DateTime 或 DateTime64,则截断并保留 DateTime 的日期部分:
如果参数为 字符串,则解析为 日期 或 DateTime。如果解析为 DateTime,则使用日期部分:
如果参数为数字并且看起来像 UNIX 时间戳(大于 65535),则将其解释为 DateTime,然后在当前时区下截断为 日期。时区参数可以作为函数的第二个参数指定。根据时区截断为 日期:
上面的示例演示如何将同一个 UNIX 时间戳在不同的时区中解释为不同的日期。
如果参数为数字并且小于 65536,则将其解释为自 1970-01-01(第一个 UNIX 日)以来的天数,并转换为 日期。它对应于 日期
数据类型的内部数字表示。示例:
此转换不依赖于时区。
如果参数不适合日期类型的范围,则会导致实施定义的行为,可能饱和到最大支持日期或溢出:
函数 toDate
也可以以备用形式书写:
toDateOrZero
与 toDate 相同,但如果接收到无效参数,则返回 日期 的下界。仅支持 字符串 参数。
示例
查询:
结果:
toDateOrNull
与 toDate 相同,但如果接收到无效参数,则返回 NULL
。仅支持 字符串 参数。
示例
查询:
结果:
toDateOrDefault
与 toDate 类似,但如果不成功,则返回默认值,该值可以是第二个参数(如果指定),否则为 日期 的下界。
语法
示例
查询:
结果:
toDateTime
将输入值转换为 DateTime。
语法
参数
如果 expr
是数字,则将其解释为从 Unix 纪元开始的秒数(即 Unix 时间戳)。
如果 expr
是 字符串,则可以将其解释为 UNIX 时间戳或日期/时间的字符串表示。
因此,短数字字符串的解析(最多 4 位)被明确禁用以避免模糊,例如字符串 '1999'
可能既是年份(日期/日期时间的不完整字符串表示)或 Unix 时间戳,较长的数字字符串是允许的。
返回值
- 日期时间。DateTime
示例
查询:
结果:
toDateTimeOrZero
与 toDateTime 相同,但如果接收到无效参数,则返回 DateTime 的下界。仅支持 字符串 参数。
示例
查询:
结果:
toDateTimeOrNull
与 toDateTime 相同,但如果接收到无效参数,则返回 NULL
。仅支持 字符串 参数。
示例
查询:
结果:
toDateTimeOrDefault
与 toDateTime 类似,但如果不成功,则返回默认值,该值可以是第三个参数(如果指定),否则为 DateTime 的下界。
语法
示例
查询:
结果:
toDate32
将参数转换为 Date32 数据类型。如果值超出范围,则 toDate32
返回 Date32 支持的边界值。如果参数具有 日期 类型,则会考虑其边界。
语法
参数
返回值
- 日历日期。类型 Date32。
示例
- 值在范围内:
- 值超出范围:
- 带 日期 参数:
toDate32OrZero
与 toDate32 相同,但如果接收到无效参数,则返回 Date32 的最小值。
示例
查询:
结果:
toDate32OrNull
与 toDate32 相同,但如果接收到无效参数,则返回 NULL
。
示例
查询:
结果:
toDate32OrDefault
将参数转换为 Date32 数据类型。如果值超出范围,则 toDate32OrDefault
返回 Date32 支持的下边界值。如果参数具有 日期 类型,则会考虑其边界。如果接收到无效参数,则返回默认值。
示例
查询:
结果:
toDateTime64
将输入值转换为 DateTime64 类型的值。
语法
参数
expr
— 值。字符串、UInt32、浮点 或 DateTime。scale
- 滴答大小(精度):10-精度 秒。有效范围:[ 0 : 9 ]。timezone
(可选)— 指定的 datetime64 对象的时区。
返回值
- 包含亚秒精度的日历日期和时间。DateTime64。
示例
- 值在范围内:
- 作为带精度的十进制:
在没有小数点的情况下,值仍然被视为以秒为单位的 Unix 时间戳:
- 带有
timezone
:
toDateTime64OrZero
与 toDateTime64 相似,该函数将输入值转换为 DateTime64 类型的值,但如果接收到无效参数,则返回 DateTime64 的最小值。
语法
参数
expr
— 值。字符串、UInt32、浮点 或 DateTime。scale
- 滴答大小(精度):10-精度 秒。有效范围:[ 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
将输入值转换为类型为 Decimal(9, S)
的值,精度为 S
。在发生错误时抛出异常。
语法
参数
支持的参数:
- 类型 (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)
的值,否则为带有S
小数位的0
。 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
将输入值转换为类型为 Decimal(18, S)
的值,精度为 S
。在发生错误时抛出异常。
语法
参数
支持的参数:
- 类型 (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)
的值,否则为带有S
小数位的0
。 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
将输入值转换为类型为 Decimal(38, S)
的值,精度为 S
。在发生错误时抛出异常。
语法
参数
支持的参数:
- 类型 (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)
的值,否则为带有S
小数位的0
。 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
将输入值转换为类型为 Decimal(76, S)
的值,精度为 S
。在发生错误时抛出异常。
语法
参数
支持的参数:
- 类型 (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)
的值,否则为带有S
小数位的0
。 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
用于在数字、字符串(但不是定长字符串)、日期和日期时间之间转换的函数。 所有这些函数接受一个参数。
在转换到字符串或从字符串转换时,值使用与TabSeparated格式(以及几乎所有其他文本格式)相同的规则进行格式化或解析。如果字符串无法被解析,将抛出异常并取消请求。
在将日期转换为数字或反之时,日期对应于自Unix纪元开始的天数。 在将日期与时间转换为数字或反之时,带时间的日期对应于自Unix纪元开始的秒数。
toDate/toDateTime函数的日期和带时间的日期格式定义如下:
作为例外,如果从UInt32、Int32、UInt64或Int64数值类型转换为Date,并且数字大于或等于65536,则该数字被解释为Unix时间戳(而不是天数),并被舍入到日期。这允许支持常见的写法toDate(unix_timestamp)
,否则将会出现错误,需要写作更繁琐的toDate(toDateTime(unix_timestamp))
。
日期和带时间的日期之间的转换按自然的方式进行:通过添加空时间或丢弃时间。
数值类型之间的转换使用与C++中不同数值类型之间的赋值相同的规则。
此外,DateTime参数的toString函数可以接受第二个String参数,包含时区的名称。示例: Asia/Yekaterinburg
在这种情况下,时间根据指定的时区进行格式化。
示例
查询:
结果:
另请参见toUnixTimestamp
函数。
toFixedString
将String类型参数转换为FixedString(N)类型(固定长度N的字符串)。 如果字符串的字节数少于N,则在右侧填充空字节。如果字符串的字节数多于N,则会抛出异常。
语法
参数
返回值
- 长度为N的
s
的固定字符串。FixedString。
示例
查询:
结果:
toStringCutToZero
接受一个String或FixedString参数。返回内容在找到的第一个空字节位置被截断的字符串。
语法
示例
查询:
结果:
查询:
结果:
toDecimalString
将数值转换为具有用户指定的小数位数的字符串。
语法
参数
返回值
- 输入值表示为具有指定小数位数(scale)的String。 如果请求的位数小于原始数字的位数,则数字会根据常规算术向上或向下四舍五入。
示例
查询:
结果:
reinterpretAsUInt8
通过将输入值视为UInt8类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt8的值
x
。UInt8。
示例
查询:
结果:
reinterpretAsUInt16
通过将输入值视为UInt16类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt16的值
x
。UInt16。
示例
查询:
结果:
reinterpretAsUInt32
通过将输入值视为UInt32类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt32的值
x
。UInt32。
示例
查询:
结果:
reinterpretAsUInt64
通过将输入值视为UInt64类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt64的值
x
。UInt64。
示例
查询:
结果:
reinterpretAsUInt128
通过将输入值视为UInt128类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt128的值
x
。UInt128。
示例
查询:
结果:
reinterpretAsUInt256
通过将输入值视为UInt256类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为UInt256的值
x
。UInt256。
示例
查询:
结果:
reinterpretAsInt8
通过将输入值视为Int8类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int8的值
x
。Int8。
示例
查询:
结果:
reinterpretAsInt16
通过将输入值视为Int16类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int16的值
x
。Int16。
示例
查询:
结果:
reinterpretAsInt32
通过将输入值视为Int32类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int32的值
x
。Int32。
示例
查询:
结果:
reinterpretAsInt64
通过将输入值视为Int64类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int64的值
x
。Int64。
示例
查询:
结果:
reinterpretAsInt128
通过将输入值视为Int128类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int128的值
x
。Int128。
示例
查询:
结果:
reinterpretAsInt256
通过将输入值视为Int256类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Int256的值
x
。Int256。
示例
查询:
结果:
reinterpretAsFloat32
通过将输入值视为Float32类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Float32的值
x
。Float32。
示例
查询:
结果:
reinterpretAsFloat64
通过将输入值视为Float64类型的值执行字节重解释。与CAST
不同,该函数不尝试保留原始值 - 如果目标类型无法表示输入类型,则输出无意义。
语法
参数
返回值
- 将重解释为Float64的值
x
。Float64。
示例
查询:
结果:
reinterpretAsDate
接受字符串、固定字符串或数值,并以主机顺序(小端序)解释字节。返回解释的数字作为自Unix纪元开始的天数。
语法
参数
返回值
- 日期。Date。
实现细节
如果提供的字符串不够长,该函数的工作方式如下:如果字符串的长度不够,则补充必要数量的空字节。如果字符串过长,将忽略多余的字节。
示例
查询:
结果:
reinterpretAsDateTime
这些函数接受一个字符串,并将放置在字符串开头的字节解释为主机顺序(小端序)中的数字。返回解释为自Unix纪元开始的秒数的日期和时间。
语法
参数
返回值
- 日期和时间。DateTime。
实现细节
如果提供的字符串不够长,该函数的工作方式如下:如果字符串的长度不够,则补充必要数量的空字节。如果字符串过长,将忽略多余的字节。
示例
查询:
结果:
reinterpretAsString
该函数接受一个数字、日期或带时间的日期,并返回一个字符串,包含在主机顺序(小端序)中表示相应值的字节。空字节从尾部删除。例如,UInt32类型值255是一个长为1字节的字符串。
语法
参数
返回值
- 包含表示
x
的字节的字符串。String。
示例
查询:
结果:
reinterpretAsFixedString
该函数接受一个数字、日期或带时间的日期,并返回一个FixedString,包含在主机顺序(小端序)中表示相应值的字节。空字节从尾部删除。例如,UInt32类型值255是一个长为1字节的FixedString。
语法
参数
返回值
- 包含表示
x
的字节的固定字符串。FixedString。
示例
查询:
结果:
reinterpretAsUUID
除了这里列出的UUID函数外,还有专门的UUID函数文档。
接受一个16字节字符串,通过将每个8字节的半部分解释为小端字节顺序返回一个UUID。如果字符串不够长,该函数的工作方式如下:如果字符串的长度不够,则补充必要数量的空字节到尾部。如果字符串超过16字节,尾部的多余字节将被忽略。
语法
参数
fixed_string
— 大端字节字符串。FixedString。
返回值
- UUID类型的值。UUID。
示例
字符串到UUID。
查询:
结果:
从字符串到UUID再到字符串。
查询:
结果:
reinterpret
使用x
值中的相同源内存字节序列并将其重解释为目标类型。
语法
参数
x
— 任何类型。type
— 目标类型。String。
返回值
- 目标类型的值。
示例
查询:
结果:
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
根据数值和间隔单位(例如,'second'或'day')创建一个Interval数据类型值。
语法
参数
-
unit
— 要创建的间隔类型。字符串字面量。 可能的值: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
— 时区。可选。
返回值
根据 MySQL 风格的格式字符串从输入字符串解析出 DateTime 值。
支持的格式说明符
与 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
— 时区。可选。
返回值
根据 Joda 风格的格式字符串从输入字符串解析出 DateTime 值。
支持的格式说明符
与 formatDateTimeInJoda 列出的所有格式说明符相同,除了:
- S: 秒的分数
- z: 时区
- Z: 时区偏移/ID
示例
parseDateTimeInJodaSyntaxOrZero
与 parseDateTimeInJodaSyntax 相同,但在遇到无法处理的日期格式时返回零日期。
parseDateTimeInJodaSyntaxOrNull
与 parseDateTimeInJodaSyntax 相同,但在遇到无法处理的日期格式时返回 NULL
。
parseDateTime64
将 String 转换为 DateTime64,符合 MySQL 格式字符串。
语法
参数
str
— 要解析的字符串。format
— 格式字符串。可选。如果未指定,默认为%Y-%m-%d %H:%i:%s.%f
。timezone
— 时区。可选。
返回值
根据 MySQL 风格的格式字符串从输入字符串解析出 DateTime64 值。 返回值的精度为 6。
parseDateTime64OrZero
与 parseDateTime64 相同,但在遇到无法处理的日期格式时返回零日期。
parseDateTime64OrNull
与 parseDateTime64 相同,但在遇到无法处理的日期格式时返回 NULL
。
parseDateTime64InJodaSyntax
将 String 转换为 DateTime64,符合 Joda 格式字符串。
语法
参数
str
— 要解析的字符串。format
— 格式字符串。可选。如果未指定,默认为yyyy-MM-dd HH:mm:ss
。timezone
— 时区。可选。
返回值
根据 Joda 风格的格式字符串从输入字符串解析出 DateTime64 值。
返回值的精度等于格式字符串中的 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
。
如果未指定年份,则默认为当前年份。如果结果的 DateTime 恰好在未来(即使是在当前时刻之后的一秒),则当前年份将替换为前一年。
返回值
- 将
time_string
转换为 DateTime 数据类型。
示例
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
查询:
结果:
另见
parseDateTimeBestEffortUS
该函数在处理 ISO 日期格式时行为类似于 parseDateTimeBestEffort,例如 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
的结果。expr
类型的 LowCardinality。
示例
查询:
结果:
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
(如果有的话)。
语法
参数
返回值
- 一个格式化的字符串。
示例
查询:
结果: