Oracle 19c中如何将Timestamp转换为不带时间的Date?
在Oracle 19c里,你得先明确一个核心点:Oracle的DATE类型本身就包含日期和时间部分,所以CAST(mytimestampfield AS DATE)只是完成了Timestamp到DATE类型的转换,但DATE依然携带时间信息——你看到输出带时间,要么是客户端工具的默认显示格式,要么是DATE本身的时间部分没被处理。
要实现你要的「纯日期」效果,分两种场景处理:
1. 得到时间部分为午夜(00:00:00)的DATE类型
如果需要的还是DATE类型,但要把时间部分清零,用TRUNC()函数截断时间即可:
SELECT TRUNC(SYSTIMESTAMP) FROM dual;
这个语句返回的DATE类型,日期为当前日期,时间部分被强制设为00:00:00。如果客户端工具默认显示时间,你可能会看到2024-02-28 00:00:00,但从逻辑上已经是你要的「纯日期」状态。
2. 直接返回纯日期格式的字符串
如果只是需要输出YYYY-MM-DD格式的纯日期字符串,用TO_CHAR()指定格式更直接:
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD') FROM dual;
这个语句直接返回字符串类型的结果,就是你想要的2024-02-28格式。
额外说明:Oracle没有单独的「纯日期」数据类型,所有日期类类型(DATE、TIMESTAMP)都包含时间信息。如果是存储需求,用TRUNC()截断后的DATE就足够;如果是前端展示或文本输出需求,TO_CHAR()是更合适的选择。
内容的提问来源于stack exchange,提问作者Davis
相关产品推荐
相关产品推荐

