我正在将 Oracle 数据库转换为 PostgreSQL 数据库。
我使用的脚本将所有 Oracle 的DATE
列都转换为TIMESTAMPS
,但我怀疑其中大部分不包含任何时间数据并且可以转换为 PostgreSQLDATE
数据类型。
为了确保这一点,我在 Oracle 上使用了以下查询:
SELECT myDate, TRUNC(myDate, 'DDD') from myTable where TRUNC(myDate, 'DDD') <> myDate;
这似乎工作正常;在大多数情况下,我返回 0 行。但是对于某些表,我得到了一些毫无意义的结果:
trunc(… myDate
17/07/95 17/07/95
24/08/42 24/08/42
29/06/02 29/06/02
26/07/88 26/07/88
更新:我的 SQL 客户端没有显示完整的值,有些行确实有一些时间数据。然而,上面几行实际上是:
trunc(… myDate
17/07/5595 00:00:00 17/07/5595 00:00:00
24/08/5542 00:00:00 24/08/5542 00:00:00
29/06/5602 00:00:00 29/06/5602 00:00:00
26/07/5588 00:00:00 26/07/5588 00:00:00
显然这些是拼写错误,但我不知道为什么我的查询会返回它们。
这是因为日期的数据表示取决于您的 NLS 设置。
在使用以下命令发出第一个命令之前,您可以更改当前 SQL 语句的日期表示:
或者看到您正在使用斜线表示法:
如果你有一个包含日期格式的列,那么它应该返回为:
参考