【问题标题】:Oracle's SQL how to convert the date's formatOracle的SQL如何转换日期的格式
【发布时间】:2021-11-13 21:37:18
【问题描述】:

这是我的桌子:

表名EXAMPLE 列名DATE

这是以下查询的输出:

SELECT date 
  FROM example;

1/23/2010

我想将输出转换为:

23-Jan-10

有可能吗?

谢谢

【问题讨论】:

    标签: sql oracle type-conversion


    【解决方案1】:

    DATE 数据类型是一种二进制格式,以 7 字节存储,没有格式,始终包含以下组件:年(存储为世纪和世纪年)、月、日、小时、分钟第二个。

    因此,您无法更改 DATE 数据类型的格式。

    如果相反,你会问这个问题:

    如何格式化DATE 以将其输出为23-Jan-10

    然后您可以使用TO_CHAR 函数将DATE 转换为格式化字符串:

    SELECT TO_CHAR(your_date_column, 'DD-MON-YY', 'NLS_DATE_LANGUAGE=English')
             AS formatted_date
    FROM   your_table;
    

    或者,如果您希望输出为 DATE 数据类型,那么您可以使用:

    SELECT your_date_column
    FROM   your_table;
    

    并更改您正在使用的用户界面(SQL/Plus、SQL Developer、Toad、PLSQLDeveloper、PHP、Java 等)以更改该用户界面显示日期的方式。解决方案将取决于您使用的用户界面,但对于 SQL/Plus 和 SQL Developer,您可以更改 Oracle 的 NLS_DATE_FORMAT 会话参数:

    ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YY';
    

    其他用户界面将有针对这些界面的不同解决方案。

    【讨论】:

      【解决方案2】:

      如果您的列在varchar/text.. 中,那么您可以先转换为日期,然后再转换回字符

      SELECT 
      TO_CHAR( 
      to_date('1/23/2010','mm/dd/yyyy'),'DD-Mon-YY'
      ) 
      datec FROM dual;
      

      如果是日期格式,只有to_char可以

      SELECT 
      TO_CHAR(date_column, 'DD-Mon-YY' ) 
      datec FROM dual;
      

      【讨论】:

      • "如果你的列是 varchar/text..",那么你有一个非常严重的设计缺陷......
      • 在许多情况下可以将日期记录为数字或 varchar。例如20210923。年年月日。它不是一个严肃的设计流程。取决于您同意如何与其他系统交互。我在许多系统中多次遇到这种情况。
      • 如果您将日期存储为除 DATE 之外的任何内容,那么您就没有完整性,并且您无法进行真正的日期比较或日期算术。如果将其定义为 varchar2,则没有什么可以阻止“yadayadayada”的“日期”。如果您将其定义为数字,则没有什么可以阻止 0 或 99 的值。如果这会导致与其他系统的接口出现问题,那么请注意接口处的问题。在“许多”系统中遇到它并不能使它成为一种有效的做法。这只是意味着这些系统的设计者同样一无所知。
      • 我同意,但这总是取决于。一种可能是将记录从平面文件加载到临时表。现在临时表可以将所有列作为文本,以免丢失任何记录,然后清理结构良好的表。
      【解决方案3】:

      您可以将格式与TO_CHAR() 转换一起使用,例如

      SELECT TO_CHAR(dt,'DD-Mon-RR') 
        FROM example
      

      在哪里

      • DATE 不是作为保留关键字的列的好名称。所以,我把它换成了dt

      【讨论】:

      • @Barbaros 感谢您的出色编辑。帮助很大
      • 我主要使用 YY ,不知道 RR 也是一种选择。目前我正在阅读它:)
      • RR 格式原本是解决千年虫问题的临时权宜之计——那是二十多年前的事了。 Oracle 使用它作为默认值,以便在大量客户安装的代码上向后兼容。也就是说,目前没有充分的理由继续使用它。 Y2k 的另一个教训是,您应该始终使用 4 位数的年份——YYYY。在 1998-1999 年间,我在这方面花费了太多时间,无法坐视这一切现在都被撤消。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-19
      • 2021-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多