【问题标题】:Oracle SQL: How to display the earliest date after min(to_char(birthdate, 'MM/DD/YYYY')) [closed]Oracle SQL:如何在 min(to_char(birthdate, 'MM/DD/YYYY')) 之后显示最早的日期 [关闭]
【发布时间】:2019-02-20 09:24:06
【问题描述】:

我需要将表中的生日转换为“MM/DD/YYYY”格式,当我这样做时,min(birthdate) 只是月份是最小数字的日期,而 max(birthdate) 是月份是最大数字的日期。如何使它显示年份最小和最大的日期,但仍采用所需的日期格式?

【问题讨论】:

    标签: sql oracle date max min


    【解决方案1】:

    您似乎在查询min(to_char(birthdate, 'MM/DD/YYYY'))。如您所见,当您这样做时,您将获得按字典顺序计算的最小值。相反,您应该应用格式应用 min/max:

    SELECT TO_CHAR(MIN(birthdate), 'MM/DD/YYYY'), TO_CHAR(MAX(birthdate), 'MM/DD/YYYY')
    FROM   mytable
    

    【讨论】:

    • 我正在使用 Oracle,当我将订单切换到 to_char 和 min 时,它显示“参数数量无效”
    • @Jonnyjohnson 我把括号弄乱了,抱歉。请参阅我编辑的答案以获取应该工作的示例
    【解决方案2】:

    只需use以下

    with t(birthdate) as
    (
     select trunc(sysdate) as birthdate from dual union all    
     select trunc(sysdate)-300 from dual union all    
     select trunc(sysdate)-600 from dual union all
     select trunc(sysdate)-900 from dual
    )
    select to_char(birthdate,'MM/DD/YYYY') as birthdate
      from t;
    
    BIRTHDATE
    ----------
    09/16/2018
    11/20/2017
    01/24/2017
    03/30/2016
    
    
    with t(birthdate) as
    (
     select trunc(sysdate) as birthdate from dual union all    
     select trunc(sysdate)-300 from dual union all    
     select trunc(sysdate)-600 from dual union all
     select trunc(sysdate)-900 from dual
    )
    select to_char(min(birthdate),'MM/DD/YYYY') as min_birthdate,
           to_char(max(birthdate),'MM/DD/YYYY')  as max_birthdate
      from t;
    
    MIN_BIRTHDATE   MAX_BIRTHDATE
    -------------   -------------
      03/30/2016      09/16/2018
    

    您首先应用最小/最大转换的位置,然后根据您希望的显示样式进行格式化。

    【讨论】:

      猜你喜欢
      • 2015-03-08
      • 2010-10-04
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      相关资源
      最近更新 更多