我在阅读PL / SQL日期时遇到问题。我想要读取的字段是datetime,其名称是last_updated。我正在做oracle和informix数据库之间的比较,这就是我使用pl / sql的原因。 我有一个看起来必须工作的查询,它是这样的:
select to_date("last_updated", 'dd/mm/YYYY') from "smetka"@informix
此查询返回结果,并且不会出现任何错误,但日期格式如此30.06。 0 014且必须为30.06。 2 014
答案 0 :(得分:2)
您可能会发现数据库期望使用格式dd/mm/yyyy
输入日期,但无论应用程序存放使用格式dd/mm/yy
并尝试使用dd/mm/yyyy
数据库格式化它接受它是在公元1世纪(而不是预期的21世纪)。
例如:
SELECT TO_DATE( '30/06/14', 'dd/mm/yy' ) AS date1,
TO_DATE( '30/06/14', 'dd/mm/yyyy' ) AS date2
FROM DUAL;
输出:
DATE1 DATE2
------------------- -------------------
2014-06-30 00:00:00 0014-06-30 00:00:00
您可以尝试使用以下内容进行更正:
SELECT CASE
WHEN TO_DATE( "last_updated", 'dd/mm/yyyy' )
BETWEEN DATE '0000-01-01' AND DATE 0100-01-01'
THEN TO_DATE( "last_updated", 'dd/mm/yyyy' ) + INTERVAL '2000' YEAR(4)
ELSE TO_DATE( "last_updated", 'dd/mm/yyyy' )
END
FROM "smetka"@informix
或
SELECT CASE
WHEN REGEXP_LIKE( "last_updated", '\d{1,2}/\d{1,2}/\d{1,2}' )
THEN TO_DATE( "last_updated", 'dd/mm/yy' )
ELSE TO_DATE( "last_updated", 'dd/mm/yyyy' )
END
FROM "smetka"@informix