You need to enable JavaScript to run this app.
导航
类型转化函数
最近更新时间:2024.12.06 14:06:04首次发布时间:2022.02.28 12:33:07

CAST

将输入值转换为指定的数据类型。与重新解释函数不同,CAST尝试使用新数据类型呈现相同的值。如果无法完成转换,则会引发异常。
语法

CAST(x, T)
CAST(x AS t)

参数

  • x— 要转换的值。可以是任何类型。
  • T— 目标数据类型的名称。字符串。
  • t— 目标数据类型。

返回值

说明

  • 转换后的值。

!!! note “注意”
如果输入值不符合目标类型的范围,结果将溢出。例如,CAST(-1, 'UInt8')返回255

示例

SELECT CAST(toInt8(-1), 'UInt8') AS cast_int_to_uint, CAST(1.5 AS Decimal(3,2)) AS cast_float_to_decimal;
┌─cast_int_to_uint─┬─cast_float_to_decimal─┐
│ 255              │ 1.50                  │
└──────────────────┴───────────────────────┘
SELECT'2016-06-15 23:00:00' AS timestamp,CAST(timestamp AS DateTime) AS datetime,CAST(timestamp AS Date) AS date,CAST(timestamp, 'String') AS string,CAST(timestamp, 'FixedString(22)') AS fixed_string;
┌─timestamp───────────┬─datetime────────────┬─date───────┬─string──────────────┬─fixed_string────────┐
│ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00 │
└─────────────────────┴─────────────────────┴────────────┴─────────────────────┴─────────────────────┘

转换为 FixedString(N) 仅适用于 String 或 FixedString 类型的参数。
支持类型转换为 Nullable 以及转回。

SELECT toTypeName(number) FROM numbers(2);
┌─toTypeName(number)─┐
│ UInt64             │
│ UInt64             │
└────────────────────┘
SELECT toTypeName(CAST(number, 'Nullable(UInt64)')) FROM numbers(2);
┌─toTypeName(CAST(number, 'Nullable(UInt64)'))─┐
│ Nullable(UInt64)                             │
│ Nullable(UInt64)                             │
└──────────────────────────────────────────────┘

reinterpretAsDate

这些函数接受一个字符串,并将字符串开头的字节解释为主机顺序(小端)的数字。如果字符串不够长,这些函数的工作方式就像用必要数量的空字节填充字符串一样。如果字符串比需要的长,则忽略多余的字节。日期被解释为自 Unix 纪元开始以来的天数。
语法

reinterpretAsDate(fixed_string)

参数

  • fixed_string— 用字节表示的字符串。

返回值

  • 约会时间。

示例

SELECT reinterpretAsDate(reinterpretAsString(toDate('2019-01-01')));
┌─reinterpretAsDate(reinterpretAsString(toDate('2019-01-01')))─┐
│ 2019-01-01                                                   │
└──────────────────────────────────────────────────────────────┘

reinterpretAsDateTime

这些函数接受一个字符串,并将字符串开头的字节解释为主机顺序(小端)的数字。如果字符串不够长,这些函数的工作方式就像用必要数量的空字节填充字符串一样。如果字符串比需要的长,则忽略多余的字节。日期被解释为自 Unix 纪元开始以来的天数,带时间的日期被解释为自 Unix 纪元开始以来的秒数。
语法

reinterpretAsDateTime(fixed_string)

参数

  • fixed_string— 用字节表示的字符串。

返回值

  • 约会时间。

示例

SELECT reinterpretAsDateTime(reinterpretAsString(toDateTime('2019-01-01 00:00:00')));
┌─reinterpretAsDateTime(reinterpretAsString(toDateTime('2019-01-01 00:00:00')))─┐
│ 2019-01-01 00:00:00                                                           │
└───────────────────────────────────────────────────────────────────────────────┘

reinterpretAsFixedString

此函数接受数字或日期或带时间的日期,并返回包含表示主机顺序(小端)相应值的字节的 FixedString。空字节将从末尾删除。例如,UInt32 类型值为 255 是一个字节长的 FixedString。
语法

reinterpretAsFixedString(x)

参数

  • x— 数字、日期或带有时间的日期。

返回值

  • 固定字符串。

示例

SELECT reinterpretAsFixedString(toDate('2019-01-01'));
┌─reinterpretAsFixedString(toDate('2019-01-01'))─┐
│ �E                                             │
└────────────────────────────────────────────────┘

reinterpretAsString

此函数接受数字或日期或带时间的日期,并返回一个字符串,其中包含表示主机顺序(小端)中相应值的字节。空字节从末尾删除。例如,UInt32 类型值 255 是一个长度为 1 个字节的字符串。
语法

reinterpretAsString(value)

参数

  • value— 数字、日期或带时间的日期

返回值

  • 用字节表示的字符串。

示例

SELECT reinterpretAsString(toDate('2019-01-01'));
┌─reinterpretAsString(toDate('2019-01-01'))─┐
│ �E                                        │
└───────────────────────────────────────────┘

toDate

将字符串、日期、日期时间、UInt* 数字转换为日期类型
。toDate
语法

toDate(time)

参数

  • time— 字符串、日期、日期时间、UInt* 数字。

返回值

  • 日期

示例

SELECT toDate('2019-01-01');
┌─cast_int_to_uint─┬─cast_float_to_decimal─┐
│ 255              │ 1.50                  │
└──────────────────┴───────────────────────┘
SELECT toDate(1);
┌─toDate(1)──┐
│ 1970-01-02 │
└────────────┘
SELECT toDate(toDateTime('2019-01-01 00:00:00'));
┌─toDate(toDateTime('2019-01-01 00:00:00'))─┐
│ 2019-01-01                                │
└───────────────────────────────────────────┘

toDecimal (32|64)

转换value为精度为 的 Decimal 数据类型Svalue可以是数字或字符串。S(scale) 参数指定小数位数。
语法

toDecimal32(value, S)
toDecimal64(value, S)

参数

  • value可以是数字或字符串
  • S(scale) 参数指定小数的位数。

返回值

  • 十进制

示例

SELECT toDecimal32(1, 2)
┌─toDecimal32(1, 2)─┐
│ 1.00              │
└───────────────────┘
SELECT toDecimal32('1', 2)
┌─toDecimal32('1', 2)─┐
│ 1.00                │
└─────────────────────┘

toDecimal(32|64)OrNull

将输入字符串转换为 Nullable(Decimal(P,S)) 数据类型值。
toDecimal*()如果您希望NULL在输入值解析错误时获取值而不是异常,则应该使用这些函数来代替函数。
语法

toDecimal32OrNull(expr, S)
toDecimal64OrNull(expr, S)

参数

  • expr— 表达式,返回字符串数据类型的值。ByteHouse 需要十进制数的文本表示形式。例如,'1.111'
  • S— 小数位数,结果值的小数位数。

返回值
数据类型 的值Nullable(Decimal(P,S))。该值包含:

  • S如果 ByteHouse 将输入字符串解释为数字,则为带有小数的数字。
  • NULL如果 ByteHouse 无法将输入的字符串解释为数字,或者输入的数字包含超过S小数位。

示例

SELECT toDecimal32OrNull(toString(-1.111), 5) AS val, toTypeName(val);
┌─val──────┬─toTypeName(toDecimal32OrNull(toString(-1.111), 5))─┐
│ -1.11100 │ Nullable(Decimal(9, 5))                            │
└──────────┴────────────────────────────────────────────────────┘
SELECT toDecimal32OrNull(toString(-1.111), 2) AS val, toTypeName(val);
sql
┌─val──┬─toTypeName(toDecimal32OrNull(toString(-1.111), 2))─┐
│ ᴺᵁᴸᴸ │ Nullable(Decimal(9, 2))                            │
└──────┴────────────────────────────────────────────────────┘

toDecimal(32|64)OrZero

将输入值转换为 Decimal(P,S) 数据类型。
toDecimal*()如果您希望0在输入值解析错误时获取值而不是异常,则应该使用这些函数来代替函数。
语法

toDecimal32OrZero( expr, S)
toDecimal64OrZero( expr, S)

参数

  • expr— 表达式数据类型。ByteHouse 需要十进制数的文本表示。例如,'1.111'
  • S— 小数位数,结果值的小数位数。

返回值
数据类型 的值Nullable(Decimal(P,S))。该值包含:

  • S如果 ClickHouse 将输入字符串解释为数字,则为带有小数的数字。
  • S如果 ClickHouse 无法将输入字符串解释为数字,或者输入的数字包含超过S小数位,则返回带有小数位的 0 。

示例

SELECT toDecimal32OrZero(toString(-1.111), 5) AS val, toTypeName(val);
┌─val──────┬─toTypeName(toDecimal32OrZero(toString(-1.111), 5))─┐
│ -1.11100 │ Decimal(9, 5)                                      │
└──────────┴────────────────────────────────────────────────────┘
SELECT toDecimal32OrZero(toString(-1.111), 2) AS val, toTypeName(val);
┌─val──┬─toTypeName(toDecimal32OrZero(toString(-1.111), 2))─┐
│ 0.00 │ Decimal(9, 2)                                      │
└──────┴────────────────────────────────────────────────────┘

toFixedString

将 String 类型参数转换为 FixedString(N) 类型(固定长度为 N 的字符串)。N 必须是常量。
如果字符串的字节数少于 N,则在右侧填充空字节。如果字符串的字节数多于 N,则抛出异常。
语法

toFixedString(s, N)

参数

  • s细绳。
  • N— 一个常数。

返回值

  • 固定字符串

示例

SELECT toFixedString('1234', 5)
┌─toFixedString('1234', 5)─┐
│ 1234                     │
└──────────────────────────┘

toInt(8|16|32|64)

将输入值转换为 Int 数据类型。
语法

toInt8(expr)
toInt16(expr)
toInt32(expr)
toInt64(expr)

参数

  • expr— 表达式返回一个数字或一个以十进制表示的数字字符串。不支持二进制、八进制和十六进制的数字表示。前导零被删除。

返回值

  • 数据类型Int8Int16Int32Int64的整数值。

函数使用向零舍入,这意味着它们会截断数字的小数部分。
NaN 和 Inf 参数的函数行为未定义。
当您将值从一种数据类型转换为另一种数据类型时,您应该记住,在通常情况下,这是一种不安全的操作,可能会导致数据丢失。如果您尝试将值从较大的数据类型转换为较小的数据类型,或者在不同数据类型之间转换值,则可能会发生数据丢失。
示例

SELECT toInt64(nan), toInt32(32), toInt16('16'), toInt8(8.8);
┌─toInt64(nan)─────────┬─toInt32(32)─┬─toInt16('16')─┬─toInt8(8.8)─┐
│ -9223372036854775808 │ 32          │ 16            │ 8           │
└──────────────────────┴─────────────┴───────────────┴─────────────┘

toInt(8|16|32|64)OrNull

它接受一个 String 类型的参数并尝试将其解析为 Int (8 | 16 | 32 | 64)。如果失败,则返回 NULL。
语法

toInt8OrNull(expr)
toInt16OrNull(expr)
toInt32OrNull(expr)
toInt64OrNull(expr)

参数

  • expr— 表达式返回一个数字或一个以十进制表示的数字字符串。不支持二进制、八进制和十六进制的数字表示。前导零被删除。

返回值

  • 数据类型Int8Int16Int32Int64的整数值。

函数使用向零舍入,这意味着它们会截断数字的小数部分。
NaN 和 Inf 参数的函数行为未定义。
当您将值从一种数据类型转换为另一种数据类型时,您应该记住,在通常情况下,这是一种不安全的操作,可能会导致数据丢失。如果您尝试将值从较大的数据类型转换为较小的数据类型,或者在不同数据类型之间转换值,则可能会发生数据丢失。
示例

SELECT toInt64OrNull('123123'), toInt8OrNull('123qwe123');
┌─toInt64OrNull('123123')─┬─toInt8OrNull('123qwe123')─┐
│                  123123 │                      ᴺᵁᴸᴸ │
└─────────────────────────┴───────────────────────────┘

toInt(8|16|32|64)OrZero

它接受一个 String 类型的参数并尝试将其解析为 Int (8 | 16 | 32 | 64 )。如果失败,则返回 0。
语法

toInt8OrZero(expr)
toInt16OrZero(expr)
toInt32OrZero(expr)
toInt64OrZero(expr)

参数

  • expr— 表达式返回一个数字或一个以十进制表示的数字字符串。不支持二进制、八进制和十六进制的数字表示。前导零被删除。

返回值

  • 数据类型Int8Int16Int32Int64的整数值。

函数使用向零舍入,这意味着它们会截断数字的小数部分。
NaN 和 Inf 参数的函数行为未定义。
当您将值从一种数据类型转换为另一种数据类型时,您应该记住,在通常情况下,这是一种不安全的操作,可能会导致数据丢失。如果您尝试将值从较大的数据类型转换为较小的数据类型,或者在不同数据类型之间转换值,则可能会发生数据丢失。
示例

SELECT toInt64OrZero('123123'), toInt8OrZero('123qwe123');
┌─toInt64OrZero('123123')─┬─toInt8OrZero('123qwe123')─┐
│ 123123                  │ 0                         │
└─────────────────────────┴───────────────────────────┘

toInterval(Year|Quarter|Month|Week|Day|Hour|Minute|Second)

将数字类型参数转换为间隔数据类型。
语法

toIntervalSecond(number)
toIntervalMinute(number)
toIntervalHour(number)
toIntervalDay(number)
toIntervalWeek(number)
toIntervalMonth(number)
toIntervalQuarter(number)
toIntervalYear(number)

参数

  • number— 间隔持续时间。正整数。

返回值

  • Interval数据类型的值。

示例

WITH
    toDate('2019-01-01') AS date,INTERVAL 1 WEEK AS interval_week,
    toIntervalWeek(1) AS interval_to_week
SELECT date + interval_week,date + interval_to_week;
┌─plus(date, interval_week)─┬─plus(date, interval_to_week)─┐
│ 2019-01-08                │ 2019-01-08                   │
└───────────────────────────┴──────────────────────────────┘

toLowCardinality

将输入参数转换为相同数据类型的 LowCardianlity 版本。
要从LowCardinality数据类型转换数据,请使用 CAST 函数。例如,CAST(x as String)
语法

toLowCardinality(expr)

参数

  • expr— 表达式产生受支持的数据类型之一。

返回值

  • 的结果expr。类型:LowCardinality(expr_result_type)

示例

SELECT toLowCardinality('1');
┌─toLowCardinality('1')─┐
│ 1                     │
└───────────────────────┘

toString

用于在数字、字符串(但不是固定字符串)、日期和带时间的日期之间进行转换的函数。
所有这些函数都接受一个参数。
在转换为字符串或从字符串转换时,值的格式或解析规则与 TabSeparated 格式(以及几乎所有其他文本格式)相同。如果无法解析字符串,则会引发异常并取消请求。
当将日期转换为数字或反之亦然时,日期对应于自 Unix 纪元开始以来的天数。
当将带有时间的日期转换为数字或反之亦然时,带有时间的日期对应于自 Unix 纪元开始以来的秒数。
toDate/toDateTime 函数的日期和日期时间格式定义如下:

YYYY-MM-DD
YYYY-MM-DD hh:mm:ss

例外情况是,如果从 UInt32、Int32、UInt64 或 Int64 数字类型转换为 Date,并且数字大于或等于 65536,则该数字将被解释为 Unix 时间戳(而不是天数)并四舍五入为日期。这允许支持常见的“toDate(unix_timestamp)”写入,否则将出现错误,并且需要写入更麻烦的“toDate(toDateTime(unix_timestamp))”。
日期和时间日期之间的转换以自然的方式进行:通过添加空时间或删除时间。
数字类型之间的转换使用与 C++ 中不同数字类型之间的赋值相同的规则。
此外,DateTime 参数的 toString 函数可以采用第二个 String 参数,其中包含时区名称。示例:Asia/Yekaterinburg在这种情况下,时间根据指定的时区进行格式化。
语法

toString(value)

参数

  • value— 数字、字符串、日期和日期时间

返回值

  • 细绳

示例

SELECT
    now() AS now_local,
    toString(now(), 'Asia/Yekaterinburg') AS now_yekat;
┌─now_local───────────┬─now_yekat───────────┐
│ 2021-08-18 15:25:59 │ 2021-08-18 12:25:59 │
└─────────────────────┴─────────────────────┘

toStringCutToZero

接受字符串或 FixedString 参数。返回在找到的第一个零字节处截断内容的字符串。
语法

toStringCutToZero(s)

参数

  • s— 字符串或固定字符串。

返回值

  • 截断字符串

示例

SELECT toFixedString('foo', 8) AS s, toStringCutToZero(s) AS s_cut;
┌─s───┬─s_cut─┐
│ foo │ foo   │
└─────┴───────┘
SELECT toFixedString('foo\0bar', 8) AS s, toStringCutToZero(s) AS s_cut;
┌─s──────┬─s_cut─┐
│ foobar │ foo   │
└────────┴───────┘

toUInt8

将输入值转换为 UInt 数据类型。此函数系列包括:
语法

toUInt8(expr)
toUInt16(expr)
toUInt32(expr)
toUInt64(expr)

参数

  • expr— 表达式返回一个数字或一个以十进制表示的数字字符串。不支持二进制、八进制和十六进制的数字表示。前导零被删除。

返回值

  • 数据类型Int8Int16Int32Int64的整数值。

函数使用向零舍入,这意味着它们会截断数字的小数部分。
函数对于负数参数以及 NaN 和 Inf 参数的行为未定义。如果您传递带有负数的字符串(例如)'-32',ByteHouse 会引发异常。
当您将值从一种数据类型转换为另一种数据类型时,您应该记住,在通常情况下,这是一种不安全的操作,可能会导致数据丢失。如果您尝试将值从较大的数据类型转换为较小的数据类型,或者在不同数据类型之间转换值,则可能会发生数据丢失。
示例

SELECT toUInt64(nan), toUInt32(-32), toUInt16('16'), toUInt8(8.8);
┌─toUInt64(nan)───────┬─toUInt32(-32)─┬─toUInt16('16')─┬─toUInt8(8.8)─┐
│ 9223372036854775808 │ 4294967264    │ 16             │ 8            │
└─────────────────────┴───────────────┴────────────────┴──────────────┘

toUnixTimestamp

对于 DateTime 参数:将值转换为类型为 UInt32 的数字——Unix 时间戳(https://en.wikipedia.org/wiki/Unix_time)。
对于字符串参数:根据时区(可选的第二个参数,默认使用服务器时区)将输入字符串转换为日期时间并返回相应的 unix 时间戳。
语法

toUnixTimestamp(datetime)
toUnixTimestamp(str, [timezone])
sql

参数

  • datetime约会时间
  • str日期时间字符串
  • timezone(可选)- 时区

返回值

  • 返回 unix 时间戳。类型:UInt32

示例

SELECT toUnixTimestamp('2017-11-05 08:07:47', 'Asia/Tokyo') AS unix_timestamp
┌─unix_timestamp─┐
│ 1509836867     │
└────────────────┘
SELECT toUnixTimestamp(toDateTime('2017-11-05 08:07:47', 'Asia/Tokyo')) AS unix_timestamp
┌─unix_timestamp─┐
│ 1509836867     │
└────────────────┘

UUID函数