sql - 如何从表中存在的选择查询中获取 Oracle DB 中的不同日期格式?
问题描述
在我的 Oracle DB 中,我有一个名为HIGH_DATE
. 某些条目的格式是“27-SEP-12”(DD-MON-YY
),而某些条目的格式是“27-09-12”(DD-MM-YY
)。
有人可以帮助我构建一个选择查询,通过它我可以获得任何一种格式的日期吗?
解决方案
如果您有一DATE
列,则它没有任何格式;它在内部存储为 7 字节(世纪、世纪年、月、日、小时、分钟、秒),只有当用于访问数据库的用户界面向用户返回数据时,它才会获取格式化(并且所有日期都将隐式转换为格式一致的字符串)。
当你说:
我有一个名为“HIGH_DATE”的日期字段
您的实际意思是:“我有一个VARCHAR2
数据类型的列,用于存储日期值”。
如果是这种情况,那么您需要做的就是:
SELECT TO_DATE( high_date, 'DD-MM-RR' ) AS high_date
FROM table_name;
如果您使用格式模型并且未使用格式模型指定完全匹配,Oracle 的字符串到日期转换规则将额外匹配格式模型。MON
MM
FX
如果你有测试数据:
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<>在这里摆弄
但是,最好的解决方案是停止将值存储为字符串并将它们(没有格式)存储为日期。
推荐阅读
- maven - 如何使用 Maven 从 pom.xml 中的 settings.xml 访问元素?
- python - 错误:不支持的操作数类型 -: 'list' 和 'int'
- c++ - 我的输出总是相同的,但我应该根据我在“efektywnosctypu”中插入的数字给出不同的答案
- ocaml - Ocaml hacl-star-raw 软件包:安装失败
- rust - std::process,带有来自缓冲区的标准输入和标准输出
- java - 如何在 Spring Boot 中从 RestTemplate 或 WebClient 获取二进制数据?
- firebase - 使用 Firebase 库在 Android Studio 中生成 JavaDoc
- python - 缺少 1 个必需的位置参数:'self'
- kdb - 如何编写使用 KDB 查询中的列的函数?
- php - 连接表上的 DISTINCT 和 RND()