【问题标题】:Select date format ddmmyyyy from oracle database从 oracle 数据库中选择日期格式 ddmmyyyy
【发布时间】:2018-02-06 22:55:12
【问题描述】:

我想从 oracle 数据库中选择一个日期字段,使用 select to_date(trndt, 'yyyymmdd') from cf20gldt,但系统显示错误。

【问题讨论】:

  • to_date() 将字符串转换为日期。您正在寻找to_char(),它将日期转换为指定格式的字符串(顺便说一句:总是包括实际的错误消息,我们无法从这里看到您的屏幕)

标签: sql oracle


【解决方案1】:

Reference

改成to_char

SELECT TO_CHAR(trndt, 'yyyymmdd') FROM cf20gldt;

如果您的 trndt 列不是日期类型,那么您必须将其更改为

SELECT TO_CHAR(TO_DATE(trndt), 'yyyymmdd') FROM cf20gldt;

例如显示系统日期

SELECT TO_CHAR(sysdate,'yyyymmdd') FROM dual;

【讨论】:

  • 到目前为止你的答案是正确的,但你不应该在没有指定格式的情况下使用 to_date。省略格式会使您的 select 语句依赖于当前的区域设置,这可能与日期字符串中的格式匹配,也可能不匹配。
  • @Naveen:当我必须在查询中使用“select *”并且需要 DD/MM/YYYY 格式的日期时该怎么办
  • @user3782114,要做到这一点,您将使用以下命令:ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';。但不要使用SELECT *
  • @user3782114 在实时应用开发中,不建议从中选择*从数据库中获取数据。需要提及您需要哪些列。
【解决方案2】:

To_date 是将列转换为日期格式。如果您的 trndt 还不是日期,请在下面使用:

select to_char(to_date(trndt), 'yyyymmdd') from cf20gldt;

或者,如果您的列 trndate 已经是日期格式,则使用以下格式:-

select to_char(trndt, 'yyyymmdd') from cf20gldt;

【讨论】:

  • 正确,但不要在未指定格式的情况下使用 to_date。请参阅我对 Naveen 答案的相应评论。
  • 我写的 to_date 没有任何格式,因此它采用数据库格式,然后将 to_char 用于所需的格式(此处为 yyyymmdd)。
  • 是的,我明白这一点。但是如果日期存储在字符串中,它会以某种已知格式存储。命名该格式而不是让 dbms 猜测。英国用户可能将他/她的设置设置为 DD/MM/YYYY,而他的美国同事设置为 MM/DD/YYYY。他们这样做是因为他们希望以他们习惯的方式(美国或英国)显示日期。这绝不会影响对数据库中存储为 varchar2 的日期的解释。
【解决方案3】:

你可以使用:

SELECT to_char(sysdate, 'yyyy-mm-dd') date,
        to_char(sysdate, 'hh24:mm:ss') hr
        FROM DUAL;

通过您的字段类型 Date 更改 sysdate。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2016-07-07
    • 2013-04-10
    • 2016-02-22
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多