如何在Oracle上比较日期与格式化日期

时间:2018-12-13 11:05:42

标签: sql oracle

如何在Oracle中比较日期和格式? 像这样:如果MyDate的格式为DD MONTH YYYY THEN /....

elsif MyDate的格式为YYYY-MONTH-DD然后...

编辑:我的日期在varchar2中,我想保持这种状态。我只想知道如何编写一个正则表达式,例如2010年10月10日。

有可能吗?如果是正则表达式,其格式应为

1 个答案:

答案 0 :(得分:0)

与问题的注释中提到的内容一样,最佳做法是拥有一个实际的DATE类型字段而不是VARCHAR2,如果您需要特定的显示格式,请将其存储在另一个字段中作为格式模式。也就是说,您可以使用REGEXP_LIKE通过以下示例中的模式检查格式。

with dateinfo as (
    select 1 as id, '2018-MARCH-10' as dtString from dual
    union all
    select 2 as id, '10 MARCH 2018' as dtString from dual ) 
select id, dtString, 
    case 
        when regexp_like(dtString, '^[0-9]{4}-.[a-zA-Z]{3,}-.[0-9]{1,2}$') then 'format1'
        when regexp_like(dtString, '^[0-9]{1,2} [a-zA-Z]{3,} [0-9]{4}$') then 'format2'
        else 'no format'
    end as dtFormat 
from dateinfo;