Sql Oracle时间戳、时区和utc

Sql Oracle时间戳、时区和utc,sql,oracle,apache-flex,timezone,oracle-sqldeveloper,Sql,Oracle,Apache Flex,Timezone,Oracle Sqldeveloper,我有一个应用程序,使用Oracle 11g 11.2.0.2.0 64位数据库 我在Person表中有很多条目。为了访问数据,我使用了不同的应用程序和相同的数据。 在本例中,我使用person表的birth\u time字段。 有些应用程序直接使用出生时间查询数据,有些应用程序使用to_char重新格式化数据,有些应用程序使用UTC函数查询数据 问题是:对于相同的数据,相同的查询,结果是不同的 在此屏幕截图中,您可以看到Oracle Sql developer 3.2.20.09的结果 所有时间

我有一个应用程序,使用Oracle 11g 11.2.0.2.0 64位数据库

我在Person表中有很多条目。为了访问数据,我使用了不同的应用程序和相同的数据。 在本例中,我使用person表的birth\u time字段。 有些应用程序直接使用出生时间查询数据,有些应用程序使用to_char重新格式化数据,有些应用程序使用UTC函数查询数据

问题是:对于相同的数据,相同的查询,结果是不同的

在此屏幕截图中,您可以看到Oracle Sql developer 3.2.20.09的结果

所有时间戳都插入了午夜时间戳,实际上是to_char。。出生时间结果是午夜。根据我的时区,UTC小时数返回时比正确时间少一小时!但是这里有一些条目,例如,最后一条是两个小时,只有千分之几是三个

使用sql*plus执行的相同查询返回正确的结果,所有条目相差一小时

有没有人有办法解决这个问题

这个问题的产生是因为我们使用adobe flex开发的一个应用程序似乎使用UTC时间执行查询,而当您使用此组件查看数据时,问题就会出现

附言:
出生时间是时间戳6

您可以更改使用的查询吗?如果是这样,您可以使用AT TIME ZONE表达式告诉Oracle此日期位于UTC时区:

SELECT SYS_EXTRACT_UTC(CAST(TRUNC(SYSDATE) AS TIMESTAMP)) AS val FROM dual;
输出:

VAL ---------------------------- 13/11/20 23:00:00,000000000 VAL ---------------------------- 13/11/21 00:00:00,000000000 输出:

VAL ---------------------------- 13/11/20 23:00:00,000000000 VAL ---------------------------- 13/11/21 00:00:00,000000000
选择内部id、出生时间、系统提取UTCCASTTRUNCbirth时间作为时区“欧洲/柏林”的时间戳,从姓名为“MILENA”和姓名为“C%”的人员处选择charbirth时间“DD/MM/YYYY HH24:MI”;返回上面相同的错误,我的结果集中的最后一个日期的时间错误。@Francesco是的,因为您指定了“欧洲/柏林”时区-参考我的示例,您必须使用“UTC”时区。谢谢。成功了。我对xxx时区的含义感到困惑。我需要在我的应用程序周围做更多的工作,但这可以工作。我仍然很惊讶为什么同一个查询在sql*plus和sql developer上给出了不同的结果:S@Francesco它会给出不同的结果,因为会话设置很重要。您可以通过发出SELECT*FROM nls\U session\U parameters来检查和比较参数;在SQLPlus和SQLDeveloper中。