Oracle的set nls_date_format破坏了日期

时间:2013-06-07 11:28:39

标签: oracle date

我有一些代码可以从oracle数据库(不是我的数据库)进行复制,而且我遇到日期格式问题。

我正在做set nls_date_format='yyyy-mm-dd hh24:mi:ss'并且大多数字段都返回正常,例如:2013-04-03 03:48:46

然而,有两个列被这个ans修改了一些东西:0001-03-20 13:00:00

现在,如果你眯着眼睛,你可以看到它只是强制格式化看起来像一个字符串。我已经检查过,这些列的类型是'date'。

那是什么给出的?我并不特别想要一次性解决方案,因为这是一个通用的复制器。

1 个答案:

答案 0 :(得分:0)

当我从基于Java应用程序的数据库迁移数据时,我遇到了这个问题。 Oracle中的日期格式没有任何问题。我处理它的方式:

CREATE TABLE table_dt(d_date DATE);

INSERT INTO table_dt VALUES (TO_DATE('0001-03-20 13:00:00', 'YYYY-MM-DD HH24:Mi:SS'));
COMMIT;

SELECT * FROM table_dt;
-- 0001-03-20 13:00:00

SELECT  CASE
            WHEN SUBSTR(TO_CHAR(d_date, 'YYYY-MM-DD HH24:Mi:SS'), 1, 1) = '0'
            THEN TO_DATE('2' || SUBSTR(TO_CHAR(d_date, 'YYYY-MM-DD HH24:Mi:SS'), 2), 'YYYY-MM-DD HH24:Mi:SS')
            ELSE d_date
        END AS parsed_d_date
FROM    table_dt;
-- 2001-03-20 13:00:00

只需清楚地向业主展示,同意并迁移。