我想迁移一个包含一些日期列的表。问题是我的日期通常是dd/mm/yyyyy HH24:MM:YYYY
格式。但有时看起来格式只有dd/mm/yyyy
或空白。
我想这就是为什么我在尝试迁移数据时获得ORA-01830的原因。
我试过
CASE 什么时候到?(MYDATE,' DD / MM / YYYY')
然后到_DATE(MYDATE,' DD / MM / YYYY 00:00:00')
结束为MYDATE
但我不确定是否可以测试日期格式(并且当然它不起作用)。
谢谢
答案 0 :(得分:1)
TO_DATE无法测试日期格式,但您可以这样做。如果Lalit的回答不够,请尝试
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
答案 1 :(得分:0)
所以你有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>