我有一个包含 10000 个日期的表,格式为 YYYY-MM-DD,列是 varchar2。 我如何将它们更新为格式 DD-MON-YYYY HH24:MI ? apex 中的申请的申请日期格式为 DD-MON-YYYY HH24:MI
我遇到错误 ORA-01843:不是有效的月份,因为日期格式不相同。
如果您想更新 varchar2 日期类型中的同一列,您可以执行以下操作:
UPDATE tablename
SET col_name = to_char(to_date(col_name, 'YYYY-MM-DD'), 'DD-MON-YYYY HH24:MI')
但是如果出现 ORA-01843 错误,您可以通过以下查询找到无效的月份:
SELECT *
FROM table_name
WHERE substr (col_name, 6, 2) NOT IN ('01', '02, '03', '04', '05', '06', '07', '08', '09', '10', '11', '12')
然后你应该更正这些记录
绝不将日期存储为字符串数据类型;始终使用最合适的格式,对于日期来说是
DATE
数据类型。
例如,如果您有样本数据:
INSERT INTO table_name (column_name)
SELECT '1970-01-01' FROM DUAL UNION ALL
SELECT '1999-12-31' FROM DUAL UNION ALL
SELECT '2024-04-29' FROM DUAL;
然后您可以创建第二列并使用以下方法填充它:
ALTER TABLE table_name ADD column_name_dt DATE;
UPDATE table_name
SET column_name_dt = TO_DATE(column_name, 'YYYY-MM-DD');
然后验证数据是否正确并删除第一列并重命名:
ALTER TABLE table_name DROP COLUMN column_name;
ALTER TABLE table_name RENAME COLUMN column_name_dt TO column_name;
然后,该表包含:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI';
SELECT * FROM table_name;
COLUMN_NAME |
---|
1970 年 1 月 1 日 00:00 |
1999 年 12 月 31 日 00:00 |
2024 年 4 月 29 日 00:00 |