使用案例何时知道日期格式是否正确

时间:2014-12-29 10:30:39

标签: oracle date datetime

我想迁移一个包含一些日期列的表。问题是我的日期通常是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

但我不确定是否可以测试日期格式(并且当然它不起作用)。

谢谢

2 个答案:

答案 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>