【问题标题】:Single Month Digit Date Format issue in OracleOracle中的单月数字日期格式问题
【发布时间】:2018-02-07 17:45:44
【问题描述】:

当我使用 'mon-d-yyyy' 将日期转换为 char 时遇到以下问题,因为我需要一个单日数字来表示一个月中 1 到 9 天的值。

当我使用 'mon-d-yyyy' 格式时,我会在 5 天后输掉比赛并得到错误的日期。对此的任何帮助都会很棒。

select to_char(sysdate-22,'mon-d-yyyy') from dual;--aug-2-2017

select to_char(sysdate-22,'mon-dd-yyyy') from dual;--aug-07-2017

select sysdate-22 from dual;--07-AUG-17 11.06.43

【问题讨论】:

    标签: oracle date


    【解决方案1】:

    在 Oracle 日期格式中,d 获取星期几。输出中的2 表示monday,而不是八月二号。

    尝试将Fill Mode 用作Format Model Modifier

    select to_char(sysdate-22,'mon-fmdd-yyyy') from dual;
    

    【讨论】:

    • 请注意,fm 充当开关。很可能它不适用,但年份也会被截断,例如to_char(sysdate-365*2000,'mon-fmdd-yyyy') 给出dec-30-18。使用to_char(sysdate-22,'mon-fmdd-fmyyyy') 以获得全年(如果适用)。
    【解决方案2】:

    一种选择可能是将您想要的日期输出拼凑在一起:

    SELECT
        TO_CHAR(sysdate-22, 'mon-') ||
        TRIM(LEADING '0' FROM TO_CHAR(sysdate-22, 'dd-')) ||
        TO_CHAR(sysdate-22, 'yyyy')
    FROM dual;
    

    涉及TRIM 的中间项从日期开始去除前导零(如果存在)。

    输出:

    演示在这里:

    Rextester

    【讨论】:

    • 可能有点矫枉过正。使用fm 要简单得多。
    • @WernfriedDomscheit 另一个答案在我测试时没有给出一个数字。也许你应该发布一些东西。
    【解决方案3】:
    SQL>SELECT TO_CHAR(TO_DATE('29-AUG-2017','DD-MON-YYYY') - 22,'"WEEKDAY :"D, MON-FMDD-YYYY') "Before22Days" FROM DUAL;
    

    D- 在 2017 年 8 月 7 日为您提供数字工作日(一周中的第二个工作日)。
    DD-给出数字月份日,即 07 日
    口蹄疫-第 7 次

    Before22Days
    ----------------------
    WEEKDAY :2, AUG-7-2017
    

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多