【问题标题】:How do I covert the date in a table from 16-04-06 to 06-APR-16 in oracle SQL?如何在 oracle SQL 中将表中的日期从 16-04-06 转换为 06-APRIL-16?
【发布时间】:2020-10-08 23:07:06
【问题描述】:

我的表的日期值为 yy-mm-dd,但我想创建一个 select 语句来选择日期并将它们输出为 dd-mon-yy,其中月份为字母。

如果我的桌子是:

姓名日期

2006 年 4 月 17 日

B 11 年 4 月 17 日

C 17-04-15

我希望输出是:

A 06-APR-17

B 11-APR-17

C 15-APR-17

如何在 oracle sql developer 中转换我的 select 语句中的表值?

【问题讨论】:

  • 你的列的数据类型是什么?是DATE 还是VARCHAR2

标签: sql oracle datetime


【解决方案1】:

假设您的列具有DATE 数据类型,然后使用TO_CHAR( column_name, 'DD-MON-RR' ) 以您所需的格式输出:

SELECT name,
       TO_CHAR( "DATE", 'DD-MON-RR', 'NLS_DATE_LANGUAGE=ENGLISH' ) AS "DATE"
FROM   table_name

因此,对于您的示例数据:

CREATE TABLE table_name ( name, "DATE" ) AS
SELECT 'A', DATE '2017-04-06' FROM DUAL UNION ALL
SELECT 'B', DATE '2017-04-11' FROM DUAL UNION ALL
SELECT 'C', DATE '2017-04-15' FROM DUAL;

这个输出:

姓名 |日期 :--- | :-------- 一个 | 06-APR-17 乙| 11-APR-17 C | 17 年 4 月 15 日

db小提琴here

【讨论】:

  • 请不要继续使用“RR”格式,该格式设计是作为 temp 修复程序来争取时间解决 Y2K 错误.... 二十年前!。正确的格式应该是 "TO_CHAR( column_name, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH' ) AS "DATE""
  • @EdStevens OP 想要输出 06-APR-17 所以 YYRR 格式模型是合适的,如果他们想扭转这个过程然后解析 06-APR-98 通常会想要RR 格式模型比 YY 格式模型更多。是的,在这个时代应该使用 4 位数的年份,但是当问题是“我如何以这种格式输出我的日期?”时那么答案应该给它请求的格式。
  • 我不同意。如果 OP 询问如何向自己的脚开枪,您会指导他如何做到这一点,或者您会指出这并不是一个好主意,并提供更好的建议以实现他的真正目标?在这种情况下,解释 to_char/to_date 是如何工作的,并指出 2 位数年份的问题。
猜你喜欢
  • 2018-05-19
  • 2016-07-27
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2021-12-02
  • 2011-02-08
相关资源
最近更新 更多