从返回的 Oracle 时间戳列中检索数据

Posted

技术标签:

【中文标题】从返回的 Oracle 时间戳列中检索数据【英文标题】:Retrieving Data From Returned Oracle Timestamp Column 【发布时间】:2013-12-31 01:54:21 【问题描述】:

我们有一个使用 Oracle 时间戳的 ColdFusion 8 (Linux) 应用程序。我们刚刚从 10g 转换为 Oracle 11g,现在我们在数据源上使用 Oracle 的瘦客户端。我们在选择时间戳列的应用程序中遇到错误。

似乎正在返回一个 oracle.sql.TIMESTAMP 类的对象。我通过转储列的内容验证了这一点。果然,它让我分解了对象的方法及其返回类型。但是,我似乎无法直接与此对象交互:

<cfquery name="getstuff" ...>
    SELECT timestampfld ...
    FROM myTable
</cfquery>

getstuff.timestampfld 包含一个对象。但是,这样做:

<cfoutput query="getstuff">
    #timestampfld.stringValue()#
    #timestampfld.dateValue()#
</cfoutput>

产生错误,指出无法找到这些方法。如何获取该对象中保存的数据?

来自 cmets 的更新:

当我获取列值并将DateFormat( timestampfld, "dd.mm.yyyy" ) 函数应用于它时。 CF 错误是

"The value class oracle.sql.timestamp cannot be converted to a date".

当我执行&lt;cfoutput&gt; 时,我得到了类定义。

在检索到的列中,我似乎得到的是一个对象而不是一个字符串。当我 cfdump 列时,我得到了 oracle.sql.TIMESTAMP 的对象。转储列出了可用的方法和字段。当我 cfoutput 相同的变量时,会显示一个字符串。当我尝试对变量执行DataFormat() 时,它抱怨它不是日期。

【问题讨论】:

你能发布exact错误吗(即:不要只描述它)。 如果你只是 &lt;cfoutput&gt;#timestampfld#&lt;/cfoutput&gt; 呢? CF 错误是“值类 oracle.sql.timestamp 无法转换为日期”。我正在获取列值并将 DateFormat() 函数应用于它。当我执行 我得到类定义。 更正。当我输出时间戳列值时,我得到一个包含时间/日期的字符串。 " 当我输出时间戳列值时,我得到一个包含所包含时间/日期的字符串" 那么......有什么问题? 【参考方案1】:

我只是在开发过程中偶然发现了这个错误。我过去有过,从那以后就忘记了。 我知道两种缓解方法: 第一个是根据answer 的一个关于不同上下文中相同错误消息的问题。 可以将以下内容添加到 jvm.config 文件中

-Doracle.jdbc.J2EE13Compliant=true

第二个是不返回Oracle TIMESTAMP 列而是CAST 它做DATE,第一,like

<cfquery name="getstuff" ...>
  SELECT CAST( timestampfld as DATE ) timestampfld
  FROM myTable
</cfquery>

说实话,我都不满意。当忘记 JVM 参数时,软件会崩溃。另一方面,CAST 可能会影响 SQL 的工作方式。

【讨论】:

以上是关于从返回的 Oracle 时间戳列中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle 时间戳列中以 UTC 保存日期

Apache Spark 从时间戳列中减去天数

如何从熊猫数据框中的时间戳列中删除时区

SQL查询以获取时间戳列中没有小时的数据

如何从 H2 中的时间戳列中提取日期

SQL (RedShift):从时间戳列中为每个月选择不同的日期