SpringBoot+Oracle SQL查询时区问题:无法显示时区信息
解决方案
首先纠正两个核心错误:
- SQL函数名是
to_char(下划线连接),你写的to-char是连字符,属于语法错误,这是导致报错的直接原因之一 - 日期格式中,分钟的格式符是
MI,你用的MM代表月份,这也会导致格式识别失败
接下来分两种场景给出正确SQL:
场景1:col1是TIMESTAMP WITH TIME ZONE类型
如果字段本身存储了时区信息,直接用TZR格式符获取时区缩写(如EST),SQL如下:
select to_char(col1, 'MM/DD/YYYY HH:MI AM TZR') as colname FROM table_name WHERE id = :tId;
如果需要显示秒和小数秒,可调整格式串为'MM/DD/YYYY HH:MI:SSxFF AM TZR'
场景2:col1是DATE类型
Oracle的DATE类型不存储时区信息,需要先将其转换为带时区的时间戳再格式化。以下示例转换为会话时区:
select to_char( FROM_TZ(CAST(col1 AS TIMESTAMP), SESSIONTIMEZONE), 'MM/DD/YYYY HH:MI AM TZR' ) as colname FROM table_name WHERE id = :tId;
若要使用数据库时区,把SESSIONTIMEZONE替换为DBTIMEZONE即可。
补充说明
TZH:TZM格式符显示的是时区偏移量(如-05:00),你需要的时区缩写(EST)对应格式符是TZR- 如果需要自动切换夏令时标识(如EST/EDT),可以使用
TZD格式符
内容的提问来源于stack exchange,提问作者poornima
相关产品推荐
相关产品推荐

