【发布时间】:2019-07-02 04:41:52
【问题描述】:
我正在尝试将日期从“dd/mm/yyyy”调整为“dd-mm-yy”,但没有成功。 在我的数据集中我有不同的日期格式,所以我会过滤掉它们以正确更正
例子:
DATES
-------
09-MAY-18
09-NOV-18
09-OCT-18
1/2/2017
1/3/2017
05/03/2018
12-OCT-18
因此,日期“2017 年 1 月 2 日”、“2017 年 1 月 3 日”、“05/03/2018”的格式应为“DD-MM-YYYY”,即“09-MAY-18”或“09-NOV-18”。
我尝试运行的公式是:
UPDATE TESTE_DATAS SET DATAS = TO_DATE(REGEXP_REPLACE(DATAS, '^\d+\/\d+\/\d+$',
CONCAT(
CONCAT(
CONCAT(
CONCAT(
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 1),
'-'),
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 3)),
'-'),
REGEXP_SUBSTR(DATAS, '^(\d+)(\/)(\d+)(\/)(\d+)$', 1, 1, 'i', 5))
),'DD-MM-YY') WHERE REGEXP_LIKE(DATAS,'^\d+\/\d+\/\d+$');
最后我得到了以下结果:
Error report -
SQL Error: ORA-01843: not a valid month
01843. 00000 - "not a valid month"
*Cause:
*Action:
预期的结果应该是:
DATES
-------
09-MAY-18
09-NOV-18
09-OCT-18
01-FEB-17
01-MAR-17
05-MAR-18
12-OCT-18
【问题讨论】:
-
你列的数据类型是date还是varchar2?
-
你使用的是什么版本的数据库?
标签: sql oracle regexp-replace to-date regexp-substr