Oracle/MySQL中的日期格式

bvuwiixz  于 2022-10-03  发布在  Oracle
关注(0)|答案(3)|浏览(157)

帮助我在不使用TO_DATE或TO_CHAR函数的情况下将以下列填充为日期。
日|月|年
-|-|
1|2|1995
2|3|1998
5|6|2020

输出

日期

01-02-1995
02-03-1998
05-06-2020

zbdgwd5y

zbdgwd5y1#

如果是Oracle,那么连接零个左填充值可能会完成这项工作(请参见第7行):

SQL> with test (day, month, year) as
  2    (select 1, 2, 1995 from dual union all
  3     select 2, 3, 1998 from dual
  4    )
  5  select day, month, year,
  6         --
  7         lpad(day, 2, '0') ||'-'|| lpad(month, 2, '0') || '-'|| year as result
  8  from test;

       DAY      MONTH       YEAR RESULT
---------- ---------- ---------- ----------------------------------------------
         1          2       1995 01-02-1995
         2          3       1998 02-03-1998

SQL>
9w11ddsr

9w11ddsr2#

如果希望查询不带TO_DATE和TO_CHAR。让我们尝试下面的查询:

SELECT 
    LPAD(EXTRACT(DAY FROM DATE (year ||  '-' || month || '-' || day)),2,'0') 
    || '-' 
    || LPAD(EXTRACT(MONTH FROM DATE (year ||  '-' || month || '-' || day)),2,'0') 
    || '-' 
    || EXTRACT(YEAR FROM DATE (year ||  '-' || month || '-' || day))
FROM YOUR_TABLE;
zpqajqem

zpqajqem3#

您应该使用TO_DATE,因为它正是为此而设计的。

但是,作为学术练习,如果您从DATE '0001-01-01'开始,然后使用ADD_MONTHS(对于Oracle,或对于MySQL,TIMESTAMPADD)表示年和月,并使用加法表示天:

在Oracle中:

SELECT t.*,
       TO_DATE(year || '-' || month || '-' || day, 'YYYY-MM-DD') AS dt,
       ADD_MONTHS(DATE '0001-01-01', 12 * (year - 1) + (month - 1)) + (day - 1) AS dt2
FROM   table_name t

其中,对于样本数据:

CREATE TABLE table_name(day, month, year) AS
SELECT 1, 2, 1995 FROM DUAL UNION ALL
SELECT 2, 3, 1998 FROM DUAL UNION ALL
SELECT 5, 6, 2020 FROM DUAL;

产出:

日|月|年|DT|DT2
-|
1|2|1995|1995-02-01 00:00:00|1995-02-01 00:00:00
2|3|1998|1998-03-02 00:00:00|1998-03-02 00:00:00
5|6|2020|2020-06-05 00:00:00|2020-06-05 00:00:00

fiddle

或MySQL:

SELECT t.*,
       TIMESTAMPADD(MONTH, 12 * (year - 1) + (month - 1), DATE '0001-01-01')
         + (day - 1) AS dt
FROM   table_name t

以下哪项输出:

日|月|年|日
-|-|
1|2|1995|19950201
2|3|1998年|19980302
5|6|2020年|20200605

fiddle

相关问题