将奇数字符串更改为日期 SQL

Changing Odd Text String to Date SQL

有一个文本字符串需要转换为日期,但是,它不是通用的 yyyymmdd 字符串。例如2018 年 3 月与所有其他日期一样存储为“2018m3”。有没有办法在 Oracle 中将字符串转换为正常日期?

如果是这种格式,你可以这样做:

select add_months(to_date(substr(col, 1, 4) || '0101'),
                  to_number(replace(substr(col, -2), 'm', '')) - 1
                 )

另一种方法:

select to_date(substr(col, 1, 4) || regexp_substr(col, '[0-9]+', 1, 2), 'YYYYMM')

这可能会有帮助:

SQL> SELECT to_date('2018m3', 'YYYY"m"MM') FROM dual
  2  /

输出

TO_DATE('2018M3','YYYY"M"MM')
-----------------------------
3/1/2018