【问题标题】:Date Conversion in Oracle (YYYYMMDD format back to YYYYMMDD)Oracle 中的日期转换(YYYYMMDD 格式回 YYYYMMDD)
【发布时间】:2018-10-27 08:47:35
【问题描述】:

您好,我是 Oracle 的新手,需要了解如何操作。

考虑我有一个文本文件,文件中的值为

'20180924' '20180923'

我从 Pro*c 读取这些值,然后添加 29 天,因此该值现在从 20180924 更改为 20180953。我不希望发生这种情况,我希望将值添加为

 TO_DATE('20180924','yyyymmdd')+29 which returns the value as "23-OCT-18" 

答案是正确的,但我希望结果也采用相同的 YYYYMMDD 格式,例如 20181023。

我如何做到这一点?

【问题讨论】:

  • 希望您将使用yyyymmdd 格式来显示输出,而不是将其作为字符串存储在表格中。

标签: oracle plsql


【解决方案1】:

只需格式化回来。

to_char(TO_DATE('20180924','yyyymmdd')+29, 'yyyymmdd')

【讨论】:

  • 如果我想得到一个日期列而不是字符怎么办?
  • @mLstudent33,已经是约会了。问题是如何更改该日期的显示格式。
【解决方案2】:

日期没有格式 - 它们是represented internally by 7 or 8 bytes

如果您希望日期具有格式,则需要将其转换为可格式化的数据类型 - 即字符串:

TO_CHAR( TO_DATE( '20180924', 'yyyymmdd' ) + 29, 'YYYYMMDD' )

当 SQL/Plus(或 SQL Developer)显示日期数据类型时,它们会隐式将它们转换为字符串(因为这对您(用户)比显示原始字节更有意义)并使用 NLS_DATE_FORMAT 会话参数作为此隐式转换中的格式模型。如果你想改变这个,那么你可以使用:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD';

然后是您的查询:

TO_DATE( '20180924', 'yyyymmdd' ) + 29

应该(假设您的 SQL 客户端使用此设置并且没有自己的内部格式首选项)给出您期望的输出。 (注意:这将更改客户端的默认格式,以显示此会话中的所有日期,而不仅仅是这一条语句。)

【讨论】:

    【解决方案3】:

    从 EMP 中选择 TO_NUMBER((TO_CHAR(TO_DATE(HIREDATE,'DD-MON-YY'),'YYYYMMDD'));

    选择 TO_NUMBER((TO_CHAR(TO_DATE(HIREDATE,'DD-MON-YY'),'YYYYMMDD'))FROM EMP


    20201101

    从 DUAL 中选择 TO_NUMBER((TO_CHAR(TO_DATE(SYSDATE,'DD-MON-YY'),'YYYYMMDD'));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 2017-05-12
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多