sql - 将 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')
解决方案
的第二个参数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