报错:
ORA-01481: invalid number format model;
原因:数据类型错误。
在子查询中查询出日期后在外面TO_CHAR报错,查询出的日期就已经是字符串了。
Oracle 数据库没有可以直接处理Number类型的函数。
解决如下:
Oracle 数据表中的日期可以用“NUMBER”类型字段存储,字段值数据如下,意为1970年1月1号0点0分距现在的毫秒值。
1543400044000
1543400044000
1543400044000
1543400044000
......
解决办法是写一个转换函数(oracle本身没有对应的转换函数):
--加上TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))/24的用意为加上当地时区的时间差。
--咱们东八区TO_NUMBER(SUBSTR(TZ_OFFSET(sessiontimezone),1,3))的值为8,除以24得到天。
CREATE OR REPLACE FUNCTION NUM_TO_DATE(IN_NUMBER NUMBER) RETURN DATE IS
BEGIN
RETURN(TO_DATE('19700101', 'yyyymmdd') + IN_NUMBER / 86400000 +
TO_NUMBER(SUBSTR(TZ_OFFSET(SESSIONTIMEZONE), 1, 3)) / 24);
END NUM_TO_DATE;
然后使用函数就可以了。
SELECT NUM_TO_DATE(T.COLTIME) FROM 表名 T;