转换函数

如果可能的话,openLooKeng 会隐式地将数字和字符值转换为正确的类型。对于任何其他类型,默认情况下,openLooKeng 不会隐式地进行转换。例如,期望返回 varchar 值的查询不会自动将 bigint 值转换为等效的 varchar 值。

必要时,可以显式地将值转换为特定的类型。

或者,您可以启用 implicit conversion 功能,然后 openLooKeng 将尝试自动应用源类型和目标类型之间的转换。

转换函数

cast(value AS type) -> type

将值显式转换为某个类型。可以使用该函数将 varchar 转换为数值类型,反之亦然。

try_cast(value AS type) -> type

cast 类似,如果转换失败,则返回 NULL。

格式化

format(format, args…) -> varchar

使用指定的格式字符串和参数返回一个格式化字符串:

SELECT format('%s%%', 123); -- '123%'
SELECT format('%.5f', pi()); -- '3.14159'
SELECT format('%03d', 8); -- '008'
SELECT format('%,.2f', 1234567.89); -- '1,234,567.89'
SELECT format('%-7s,%7s', 'hello', 'world'); --  'hello  ,  world'
SELECT format('%2$s %3$s %1$s', 'a', 'b', 'c'); -- 'b c a'
SELECT format('%1$tA, %1$tB %1$te, %1$tY', date '2006-07-04'); -- 'Tuesday, July 4, 2006'

数据大小

parse_presto_data_size 函数支持以下单位:

单位说明
B字节1
kB千字节1024
MB兆字节1024^2
GB吉字节1024^3
TB太字节1024^4
PB拍字节1024^5
EB艾字节1024^6
ZB泽字节1024^7
YB尧字节1024^8

parse_presto_data_size(string) -> decimal(38)

将格式为 value unitstring 解析为一个数字,其中 valueunit 值的小数表示形式:

SELECT parse_presto_data_size('1B'); -- 1
SELECT parse_presto_data_size('1kB'); -- 1024
SELECT parse_presto_data_size('1MB'); -- 1048576
SELECT parse_presto_data_size('2.3MB'); -- 2411724

隐式转换

您可以通过设置会话属性来启用隐式转换。

SET SESSION implicit_conversion=true

默认情况下,属性值为 false,此时隐式转换关闭。

如果属性值设置为 true,每当 openLooKeng 发现类型不匹配,但可能彼此兼容时,openLooKeng 就会通过应用 CAST 函数来自动重写语句。

这样,用户就无需显式地添加 CAST 函数来对类型进行转换。

例如,期望返回 varchar 值的查询会自动将 bigint 值转换为等效的 varchar 值。

很显然,并非所有的数据类型都是相互兼容的,下表列出了所有基本数据类型的所有可行转换。

BOOLEANTINYINTSMALLINTINTEGERBIGINTREALDOUBLEDECIMALVARCHARCHARVARBINARYJSONDATETIMETIME WITH TIME ZONETIMESTAMPTIMESTAMP WITH TIME ZONE
BOOLEANY(1)YYYYYYY(2)NNYNNNNN
TINYINTY(3)YYYYYYYNNYNNNNN
SMALLINTYY(4)YYYYYYNNYNNNNN
INTEGERYYYYYYYYNNYNNNNN
BIGINTYYYYYYYYNNYNNNNN
REALYYYYYYY(5)YNNYNNNNN
DOUBLEYYYYYYYYNNYNNNNN
DECIMALYYYYYYY(6)YNNYNNNNN
VARCHARY(7)YYYYYYY(8)Y(9)YYY(10)Y(11)Y(12)Y(13)Y
CHARNNNNNNNNYNNNNNNN
VARBINARYNNNNNNNNNNNNNNNN
JSONNNNNNNNNYNNNNNNN
DATENNNNNNNNYNNYNNY(14)Y
TIMENNNNNNNNYNNNNY(15)Y(16)Y
TIME WITHNNNNNNNNYNNNNYYY
TIME ZONE
TIMESTAMPNNNNNNNNYNNNYYYY
TIMESTAMPNNNNNNNNYNNNYYYY
WITH TIME
ZONE

说明:

  • Y 或 Y(#):表示支持隐式转换。但您可能需要注意一些限制。请参阅以下各项。
  • N:表示不支持隐式转换

(1)BOOLEAN -> NUMBER:转换结果只能为 0 或 1。

(2)BOOLEAN -> VARCHAR:转换结果只能为 TRUE 或 FALSE。

(3)NUMBER -> BOOLEAN:0 将转换为 false,其他值将转换为 true。

(4)BIG PRECISION -> SAMLL:当数据超出 SMALL 范围时,转换将失败。

(5)REAL/FLOAT -> DECIMAL:当数据超出 DECIMAL 范围时,转换将失败。当超出范围时,范围将被截断。

(6)DECIMAL -> DECIMAL:当数据超出 DECIMAL 范围时,转换将失败。当超出范围时,范围将被截断。

(7)VARCHAR -> BOOLEAN:只能转换“0”、“1”、“TRUE”和“FALSE”。其他值的转换会失败。

(8)VARCHAR -> DECIMAL:当数据不是数值或转换后的值超出 DECIMAL 范围时,转换将失败。当超出范围时,范围将被截断。

(9)VARCHAR -> CHAR:如果 VARCHAR 的长度大于 CHAR,它将被截断。

(10)VARCHAR -> DATE:只能将 VARCHAR 格式化为“YYYY-MM-DD”的形式,例如 2000-01-01。

(11)VARCHAR -> TIME:只能将 VARCHAR 格式化为“HH:MM:SS.XXX”的形式。

(12)VARCHAR -> TIME ZONE:只能将 VARCHAR 格式化为“HH:MM:SS.XXX XXX”的形式,例如 01:02:03.456 America/Los_Angeles

(13)VARCHAR -> TIMESTAMP:只能将 VARCHAR 格式化为“YYYY-MM-DD HH:MM:SS.XXX”的形式。

(14)DATE -> TIMESTAMP:会自动使用 0 填充时间,例如将 2010-01-01 转换为 2010-01-01 00:00:00.000。

(15)TIME -> TIME WITH TIME ZONE:会自动填充默认时区。

(16)TIME -> TIMESTAMP:会自动添加默认日期 1970-01-01。

其他

typeof(expr) -> varchar

返回所提供的表达式类型的名称:

SELECT typeof(123); -- integer
SELECT typeof('cat'); -- varchar(3)
SELECT typeof(cos(2) + 1.5); -- double

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫