新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/18 12:32:07来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MCP 地址报 401?TaoToken 这样改 Base URL 2026/9/18 13:26:20

MCP 地址报 401?TaoToken 这样改 Base URL

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

阅读更多 →
ANSYS齿轮齿根应力精确仿真:从渐开线建模到六面体网格分析 2026/9/18 13:26:20

ANSYS齿轮齿根应力精确仿真:从渐开线建模到六面体网格分析

简介:本资源是一份面向机械设计与仿真初学者的ANSYS齿轮应力分析实践指南,聚焦渐开线直齿轮参数化建模与接触/齿根应力有限元仿真全流程。文档系统讲解APDL语言驱动的齿轮建模方法、ANSYS图形界面下的镜像旋转装配技巧、网格划分策略及应力云图后处理解读…

阅读更多 →
GIS图斑跨图层复制粘贴全攻略:坐标系、字段映射与拓扑处理 2026/9/18 13:26:20

GIS图斑跨图层复制粘贴全攻略:坐标系、字段映射与拓扑处理

1. 内容整体设计与思路拆解1.1 为什么需要跨图层复制图斑干GIS这行的都知道,图斑跨图层复制粘贴这个操作,听着像个基础功能,但真正用好的还真不多。我是从一个县里的土地调查项目里第一次大量用到这个功能的,当时要把规划图里的用…

阅读更多 →
MySQL触发器NEW与OLD边界详解:可见性、可写性与常见陷阱 2026/9/18 13:26:20

MySQL触发器NEW与OLD边界详解:可见性、可写性与常见陷阱

写过触发器的人大概都经历过这种时刻:改完一条订单记录,回头查审计表,old_value 和 new_value 两列全是 NULL;或者在 BEFORE UPDATE 里明明把 NEW.status 改成了 1,落库之后还是 0。折腾半天,最后发现问题都…

阅读更多 →
Lighthouse下载安装指南:Windows/Linux/macOS三平台一次搞定 2026/9/18 13:26:20

Lighthouse下载安装指南:Windows/Linux/macOS三平台一次搞定

Lighthouse下载安装指南:Windows/Linux/macOS三平台一次搞定 【免费下载链接】Lighthouse 项目地址: https://gitcode.com/GitHub_Trending/lighthouse26/Lighthouse Lighthouse 是一款免费的《Banjo-Kazooie》(霸王大冒险)PC 移植版…

阅读更多 →
Spack 中的 Ruby 构建系统(RubyPackage)完全指南:从 gemspec 源码到预打包 gem 的安装 2026/9/18 13:23:19

Spack 中的 Ruby 构建系统(RubyPackage)完全指南:从 gemspec 源码到预打包 gem 的安装

Spack 中的 Ruby 构建系统(RubyPackage)完全指南:从 gemspec 源码到预打包 gem 的安装 【免费下载链接】spack A flexible package manager that supports multiple versions, configurations, platforms, and compilers. 项目地址: https:…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞