首页 > 解决方案 > 将 VARCHAR 转换为具有不同日期格式的日期 - ORACLE

问题描述

我有一个具有 2 种不同日期格式的字段,我希望它具有相同的格式,以便我可以执行 TO_DATE。

当前的

DATE|FORMAT|DATA_TYPE
2020-12-15|YYYY-MM-DD|VARCHAR
12/16/2020|MM/DD/YYYY|VARCHAR

预期的

DATE|FORMAT|DATA_TYPE
2020-12-15|YYYY-MM-DD|DATE
2020-12-16|YYYY-MM-DD|DATE

我在下面尝试过

TO_DATE(ACQUIREDDATE,'YYYY-MM-DD') 

标签: sqloracle

解决方案


的第二个参数to_date()可以是一个表达式,就像第一个参数一样 - 它不必是硬编码的(它不必是字符串文字)。

特别是,如果日期格式存储在单独的列中,您可以将其作为第二个参数传入。

在下图中,首先我设置了我想用于我的会话的日期格式。然后我显示查询 - 包括 WITH 子句(不是解决方案的一部分!)只是为了提供测试数据。

alter session set nls_date_format='dd-MON-yyyy';

with
  my_table (acquireddate, dtformat) as (
    select '2020-12-15', 'YYYY-MM-DD' from dual union all
    select '12/16/2020', 'MM/DD/YYYY' from dual
  )
select acquireddate, dtformat,
       to_date(acquireddate, dtformat) as my_date
from   my_table
;

ACQUIREDDATE DTFORMAT   MY_DATE    
------------ ---------- -----------
2020-12-15   YYYY-MM-DD 15-DEC-2020
12/16/2020   MM/DD/YYYY 16-DEC-2020

推荐阅读