【问题标题】:Oracle get date formatted as string between two datesOracle将日期格式化为两个日期之间的字符串
【发布时间】:2016-09-22 22:37:40
【问题描述】:

我正在尝试使用 2 个格式化日期,如果我有 TO_DATE('20160101' YYMMDD) 和 TO_DATE('20160104', YYMMDD) 我想收到这个输出:

20160101
20160102
20160103
20160104

有没有不使用 PL/SQL 的快速方法来实现这一点?

谢谢大家!

【问题讨论】:

    标签: oracle


    【解决方案1】:

    to_date() 中的格式掩码也必须用单引号括起来。

    要生成字符串格式的输出,您需要使用相同的格式掩码应用to_char()

    select to_char(to_date('20160101', 'YYYYMMDD') + level - 1, 'YYYYMMDD') as dt
    from   dual
    connect by level <= 1 + to_date('20160104', 'YYYYMMDD') - to_date('20160101', 'YYYYMMDD')
    ;
    
    
    DT     
    --------
    20160101
    20160102
    20160103
    20160104
    

    【讨论】:

    • 是的,对不起,我弄错了英语和意大利语日期时间之间的格式,所以它不能正常工作,谢谢你,它工作得很好!
    【解决方案2】:
    SELECT DATE '2016-01-01' + LEVEL - 1
    FROM   DUAL
    CONNECT BY LEVEL <= DATE '2016-01-04' - DATE '2016-01-01' + 1;
    

    【讨论】:

    • 感谢您的回答,但我需要相同的日期格式:'20160102' 等。不是日期
    • @Chrix1387 然后只需使用TO_CHAR( datevalue, format_mask ) 格式化字符串和/或TO_DATE( stringvalue, format_mask ) 从字符串中获取日期。
    • connect by level 是这样做的正确方法,如果您需要另一种格式 @Chrix1387 则只需使用 to_char(mydate,'RRRRMMDD' ) 格式化结果
    • @Plirkee - 为什么是 RRRR 而不是 YYYY?
    • @mathguy 只是一种习惯,我猜 ;-) 据我所知,我曾与 YYYY 进行过一次或两次不理想的转换
    猜你喜欢
    • 2020-08-07
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多