StarRocks TIME_FORMAT 函数详解:TIME 类型时间格式化实战指南

发布时间:2026/9/18 12:32:06

StarRocks TIME_FORMAT 函数详解:TIME 类型时间格式化实战指南 StarRocks TIME_FORMAT 函数详解TIME 类型时间格式化实战指南【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks导读本文以 StarRocks 官方文档 time_format 为主体结合前端函数注册与后端列式计算实现源码系统讲解TIME_FORMAT函数的语法、全部格式说明符、真实执行行为与边界情况。读完本文你将掌握如何将 TIME 类型值按任意自定义模板输出为 VARCHAR 字符串并能理解其在 StarRocks 向量化执行引擎中的底层工作原理。一、函数定位TIME 类型专属的格式化函数StarRocks 的日期时间函数家族中date_format、datetime_format面向 DATETIME/DATE 类型而TIME_FORMAT是专门为TIME 类型设计的格式化函数它接受一个 TIME 值和一个格式模板返回按模板渲染后的 VARCHAR 字符串适用于需要将时分秒可含微秒按自定义样式展示的场景例如报表中的07:30:10 PM、14:30等输出需求。从实现层面看该函数在 FE 端通过 FunctionSet.java 中的TIME_FORMAT time_format注册为内置标量函数在 BE 端由 time_functions.cpp 的TimeFunctions::time_format执行函数签名与文档声明完全对应VARCHAR TIME_FORMAT(TIME time, VARCHAR format)二、语法与参数说明VARCHAR TIME_FORMAT(TIME time, VARCHAR format)参数类型是否必填说明timeTIME必填待格式化的时间值仅支持 TIME 类型formatVARCHAR必填格式化模板由格式说明符与普通字符混合组成三、格式说明符全解TIME_FORMAT支持的格式说明符共 7 个覆盖了时、分、秒、微秒与上下午标识%f Microseconds (000000 to 999999) %H Hour (00 to 23) %h Hour (00 to 12) %i Minutes (00 to 59) %p AM or PM %S Seconds (00 to 59) %s Seconds (00 to 59)对照 time_functions.cpp 的 switch 分支可确认每个说明符的精确行为说明符含义输出范围源码行为%f微秒000000–999999以 6 位宽度、左补零输出微秒部分std::setw(6)%H小时24 小时制00–23以 2 位宽度、左补零输出小时%h小时12 小时制01–12(hours % 12) 0 ? 12 : (hours % 12)即 0 点与 12 点均显示为 12%i分钟00–59以 2 位宽度、左补零输出分钟%S/%s秒00–59两个说明符等价均以 2 位宽度输出秒%p上下午标识AM / PM小时 12输出AM否则输出PM注意官方文档中对%h的描述写为 Hour (00 to 12)而当前仓库源码的实际实现为 12 小时制显示01–12其中 0 点被显示为 12这一点以源码实现为准。普通字符非%开头会被原样复制到结果中%与空格、冒号等字符组合时空格与冒号照常输出。另外%后跟随的字符若不在上述 7 个说明符之内则会按%加该字符的形式原样保留见default分支例如%Y会输出字面量%Y——这与date_format等函数的行为不同使用时应特别注意。四、使用示例4.1 官方文档示例文档给出的经典示例mysql SELECT TIME_FORMAT(19:30:10, %h %i %s %p); ---------------------------------------- | time_format(19:30:10, %h %i %s %p) | ---------------------------------------- | 12 00 00 AM | ---------------------------------------- 1 row in set (0.01 sec)需要说明的是该示例输出为历史文档记录。对照当前仓库实现输入19:30:10经to_timestamp拆分为hours19, minutes30, seconds10后%h应输出0719 % 12%p因19 12应输出PM即当前实现下该查询实际返回07 30 10 PM。若想验证可直接在 mysql 客户端中执行查询并与输出比对。4.2 更多实战示例基于源码中 time_functions_test.cpp 的测试用例可以确认以下行为-- 24 小时制完整时间输出 14:30:40 SELECT TIME_FORMAT(14:30:40, %H:%i:%S); -- 仅取时分输出 14:30 SELECT TIME_FORMAT(14:30:40, %H:%i); -- 模板中混入普通文本输出 Time: 14:30 SELECT TIME_FORMAT(14:30:40, Time: %H:%i); -- 仅取小时输出 14 SELECT TIME_FORMAT(14:30:40, %H); -- 12 小时制加 AM/PM输出 02:30:40 PM SELECT TIME_FORMAT(14:30:40, %h:%i:%s %p);上述行为均有 BE 端单元测试覆盖测试构造TimestampValue::create(0, 0, 0, 14, 30, 40)表示14:30:40分别以%H:%i:%S、%H:%i、Time: %H:%i、%H四种模板验证输出并断言了14:30:40、14:30、Time: 14:30、14四个正确结果。五、源码级实现解析TimeFunctions::time_format是典型的向量化执行路径实现time_functions.cpp 的完整处理流程如下参数校验要求恰好传入 2 个参数否则返回Status::InvalidArgument空值短路若整列全为 NULL直接返回空列逐行处理时任一参数为 NULL 则该行结果为 NULLbuilder.append_null()类型视图通过ColumnViewerTYPE_TIME与ColumnViewerTYPE_VARCHAR分别读取 TIME 列与格式串列字段拆分将 TIME 值转换为TimestampValue后调用to_timestamp一次性拆出年、月、日、时、分、秒、微秒共 7 个字段模板解析逐字符扫描格式串遇到%后读取下一个字符进入 switch 分支按前文表格渲染对应字段普通字符直接写入结果结果构建使用ColumnBuilderTYPE_VARCHAR构建输出列并通过ColumnHelper::is_all_const(columns)保留常量列优化能力。TIME 值的内部表示值得注意从 time_functions.cpp 中MAX_TIME 3023999L与sec_to_time的限幅逻辑可以推断TIME 类型在内部以自00:00:00起经过的秒数双精度可带小数微秒存储并允许超过 24 小时乃至负值范围约为 ±838:59:59。因此TIME_FORMAT对超过 24 小时的时间值%H会按实际小时数输出如30:15:00的%H为30%p则仍按 24 小时制整点判定 AM/PM。六、边界行为与注意事项NULL 传播time或format任一为 NULL结果为 NULL未知说明符原样保留%后跟不支持字符如%Y、%m时不会报错而是输出字面量%Y。因为 TIME 类型不含年月日信息模板中不应使用日期类说明符结尾孤立%格式串以%结尾时函数会输出单个%字符源码中if (in_format) result %;分支12 小时制特例%h在 0 点与 12 点时均输出12区分大小写%H24 小时制与%h12 小时制、%S与%s均大小写敏感但语义分列%i与%I不同——%I不在支持列表内会原样输出返回值类型始终返回 VARCHAR可与CONCAT、CASE WHEN等表达式组合使用。七、与同类函数的区别TIME_FORMAT与datetime_format声明于 time_functions.cpp容易混淆区别如下函数输入类型输出语义TIME_FORMATTIME仅格式化时分秒/微秒部分支持%f %H %h %i %p %S %sdatetime_formatDATETIME格式化完整日期时间支持%Y %m %d等日期说明符若你的数据列是 DATETIME 类型但只需展示时间部分可先用CAST或相应时间截取函数将其转为 TIME 后再调用TIME_FORMAT。八、参考与验证函数文档docs/en/sql-reference/sql-functions/date-time-functions/time_format.mdBE 端实现be/src/exprs/time_functions.cpp单元测试be/test/exprs/time_functions_test.cppFE 端函数注册fe/fe-core/src/main/java/com/starrocks/catalog/FunctionSet.java在本地开发环境运行./run-be-ut.sh或执行TimeFunctionsTest中time_format相关用例即可复现本文引用的全部格式化行为作为线上 SQL 编写时的可靠参照。【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/18 12:32:06

死锁活锁饥饿阻塞无锁:Java并发问题诊断与实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 12:32:06

HCCL 算子重执行参数详解:HCCL_OP_RETRY_PARAMS 配置指南

HCCL 算子重执行参数详解:HCCL_OP_RETRY_PARAMS 配置指南 【免费下载链接】hccl 集合通信库(Huawei Collective Communication Library,简称HCCL)是基于昇腾AI处理器的高性能集合通信库,为计算集群提供高性能、高可靠的…

2026/9/18 12:27:06

Matlab波束形成实现指南:从相移到MVDR与宽带处理

简介:面向无线通信、雷达及声纳阵列信号处理学习者的 MATLAB 波束赋形专题文档,系统讲解均匀线阵方向图绘制、波束宽度与波达方向及阵元数的关系、栅瓣产生与抑制、最优权傅里叶变换、最大信噪比准则方向图与功率谱、ASC旁瓣相消MSE准则等核心内容。资源…

2026/9/18 14:52:22

SecureCRT中文显示终极指南:UTF-8编码链路全打通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 14:52:22

STM32 CubeMX嵌入式开发避坑指南:从配置到量产的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 14:52:22

Win7开机启动项管理:注册表、服务与计划任务全指南

简介:这份 Word 文档系统梳理了 Windows 7 开机启动项的管理方法,面向需要优化系统启动速度、排查可疑自启动程序的普通用户,也适用于系统维护和技术支持人员。文档逐一说明启动文件夹在开始菜单和硬盘中的具体位置(C:\Documents …

2026/9/18 14:52:22

DH-DSS-H8900S2-B智慧园区平台配置实战:部署、APP开通与联动排错

简介:面向智慧园区综合管理平台的项目实施、系统集成和日常运维人员,这份帮助文档以 DH-DSS-H8900S2-B 平台的智慧园区APP为主要对象,系统讲解APP端各项业务的使用方法和平台侧配置流程。文档共收录一个DOCX文件,压缩包约7.18MB&a…

2026/9/18 14:52:22

单链表从原理到实现:数据结构核心操作与调试实战

链表这个东西,但凡你翻开任何一本数据结构教材,它基本都排在顺序表后面出场。我刚开始学的时候也没把它当回事,觉得数组用得好好的,凭空搞出一个"指针指来指去"的结构图啥。直到有一次写一个需要频繁在中间插入元素的程…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码