【问题标题】:How to change date format to 'dd-Mon-yy' in Oracle如何在 Oracle 中将日期格式更改为“dd-Mon-yy”
【发布时间】:2017-06-05 22:10:59
【问题描述】:

我正在尝试获取特定的日期格式“DD-Mon-YY”

我的表格有一个日期字段 (birth_dt),其默认格式为“dd/mm/yyyy”

我不希望结果是文本(即不想使用to_char()),因为结果需要导出到 Excel 电子表格,并且业务需要根据日期字段进行一些排序.

我尝试使用:

SELECT to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy') FROM  TABLE t 

但它仍然提供与前面所述相同的日期格式 (dd/mm/yyyy)。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • “日期字段的默认格式为...”是什么意思? birth_dt 真的是 DATE 数据类型,还是 'dd/mm/yyyy' 格式的 VARCHAR2? 不可能两者兼有!如果您不知道,请使用describe t

标签: oracle oracle11g plsqldeveloper


【解决方案1】:

您似乎对DATE 数据类型感到困惑。 DATE 没有“格式”(如果您真的想看看日期是如何在 Oracle 内部存储的,您可以使用 DUMP() 函数 - 您会看到内部格式与格式模型无关) . 'dd/mm/yyyy' 和所有变体仅用于将日期表示为字符串,而不用于其他任何内容。

DATE 数据类型的日期导出到 Excel。无论您在 Excel 中需要什么格式,都可以在那里进行。无论您需要进行何种排序,请按日期进行 - 正确排序不需要“格式模型”。

关于您的困惑:当您 SELECT 一个日期时(但不是在您导出它时!)它必须转换为字符串,因为您只能“看到”字符。 Oracle 根据您当前的 NLS_DATE_FORMAT 参数转换日期 - 但是当您 order by 日期字段或导出到 Excel 时,只要您以 DATE 数据类型导出 (如你所愿)。

【讨论】:

    【解决方案2】:

    to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy') 没有任何意义。

    您正在将日期转换为字符串,然后再转换回日期。

    Oracle 中的日期没有任何格式。格式应用于它们。 日期以基于 NLS 参数的格式在您的工具中显示。您可以在工具的 NLS 设置中进行设置。

    【讨论】:

    • @mathguy 删除了引用
    【解决方案3】:

    您正在寻找的答案可以通过使用 NLS_SESSION 参数来完成。希望插图有所帮助。

    注意:此设置仅适用于当前会话。关闭会话后,设置也将恢复。

    SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10;
    
    --Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table
    
    SELECT * FROM nls_session_parameters;
    
    ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';_
    
    --Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table
    
    SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10;
    

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多