首页 > 解决方案 > 如何从表中存在的选择查询中获取 Oracle DB 中的不同日期格式?

问题描述

在我的 Oracle DB 中,我有一个名为HIGH_DATE. 某些条目的格式是“27-SEP-12”(DD-MON-YY),而某些条目的格式是“27-09-12”(DD-MM-YY)。

有人可以帮助我构建一个选择查询,通过它我可以获得任何一种格式的日期吗?

标签: sqloracledateoracle11g

解决方案


如果您有一DATE列,则它没有任何格式;它在内部存储为 7 字节(世纪、世纪年、月、日、小时、分钟、秒),只有当用于访问数据库的用户界面向用户返回数据时,它才会获取格式化(并且所有日期都将隐式转换为格式一致的字符串)。

当你说:

我有一个名为“HIGH_DATE”的日期字段

您的实际意思是:“我有一个VARCHAR2数据类型的列,用于存储日期值”。

如果是这种情况,那么您需要做的就是:

SELECT TO_DATE( high_date, 'DD-MM-RR' ) AS high_date
FROM   table_name;

如果您使用格式模型并且未使用格式模型指定完全匹配,Oracle 的字符串到日期转换规则将额外匹配格式模型。MONMMFX

如果你有测试数据:

CREATE TABLE table_name ( high_date ) AS
SELECT '23-09-20' FROM DUAL UNION ALL
SELECT '15-AUG-99' FROM DUAL;

然后上面的查询将输出(取决于你的NLS_DATE_FORMAT):

| HIGH_DATE |
| :----------------- |
| 2020-09-23T00:00:00 |
| 1999-08-15T00:00:00 |

db<>在这里摆弄

但是,最好的解决方案是停止将值存储为字符串并将它们(没有格式)存储为日期。


推荐阅读