繁体   English   中英

将 VARCHAR 转换为具有不同日期格式的日期 - ORACLE

[英]Convert VARCHAR to Date with different date formatted - 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') 

如果您只有两种格式,则可以使用case表达式:

select (case when date like '%-%-%' then to_date(date, 'YYYY-MM-DD')
             else to_date(date, 'MM/DD/YYYY')
        end) as real_date

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

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

在下图中,首先我设置了要用于 session 的日期格式。 然后我显示查询——包括一个 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

最安全的方法是使用VALIDATE_CONVERSION function(在 Oracle 12.2 中引入)如下:

SQL> -- sample data
SQL> with your_table (date_col) as (
  2  select '2020-12-15' from dual union all
  3  select '12/16/2020' from dual
  4  )
  5  -- Query starts from here
  6  SELECT DATE_COL,
  7         TO_DATE(DATE_COL, -- Your table's column name
  8                 CASE WHEN VALIDATE_CONVERSION(DATE_COL AS DATE,'YYYY-MM-DD') = 1
  9                      THEN 'YYYY-MM-DD' -- format of the column according to VALIDATE_CONVERSION
 10                      ELSE 'MM/DD/YYYY' -- format of the column according to VALIDATE_CONVERSION
 11                 END) AS DATE_DERIVED
 12    FROM YOUR_TABLE;

DATE_COL     DATE_DERIVED
----------   --------------------
2020-12-15   15-DEC-2020 00:00:00
12/16/2020   16-DEC-2020 00:00:00

SQL>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM