我想迁移一个包含一些带有日期的列的表。问题是我的日期通常是dd/mm/yyyyy HH24:MM:YYYY
格式。但有时格式似乎只是dd/mm/yyyy
或空白。
我想这就是为什么我在尝试迁移数据时获得ORA-01830的原因。
我试过了
箱 当TO_DATE(MYDATE,'DD/MM/YYYY')
然后TO_DATE(我的日期,'日/月/年 00:00:00')
结尾为 MYDATE
但我不确定是否可以测试日期格式(当然它不起作用)。
谢谢
TO_DATE无法测试日期格式,但您可以这样做。如果拉利特的回答还不够,请尝试类似
select
case when my_date like '__/__/__' then to_date(my_date, 'dd/mm/yy')
when my_date like '__-__-__' then to_date(my_date, 'dd-mm-yy')
...
end
所以你有data type
问题。 DATE
存储为 string literal
。正如您提到的,date model
具有相同的DD/MM/YYYY
部分,只是某些行缺少time
部分或整个值NULL
。
例如,假设您的表具有如下值 -
SQL> WITH dates AS(
2 SELECT 1 num, '29/12/2014 16:38:57' dt FROM dual UNION ALL
3 SELECT 2, '29/12/2014' FROM dual UNION ALL
4 SELECT 3, NULL FROM dual
5 )
6 SELECT num, dt
7 FROM dates
8 /
NUM DT
---------- -------------------
1 29/12/2014 16:38:57
2 29/12/2014
3
SQL>
具有正确格式模型的TO_DATE
应该可以解决问题。
让我们先坚持一个格式模型。
SQL> alter session set nls_date_format='dd/mm/yyyy hh24:mi:ss';
Session altered.
现在,让我们使用 TO_DATE
将字符串文本显式转换为日期。
SQL> WITH dates AS(
2 SELECT 1 num, '29/12/2014 16:38:57' dt FROM dual UNION ALL
3 SELECT 2, '29/12/2014' FROM dual UNION ALL
4 SELECT 3, NULL FROM dual
5 )
6 SELECT num, to_date(dt, 'dd/mm/yyyy hh24:mi:ss') dt
7 FROM dates
8 /
NUM DT
---------- -------------------
1 29/12/2014 16:38:57
2 29/12/2014 00:00:00
3
SQL>