【问题标题】:Comparing Datetime in Oracle比较 Oracle 中的日期时间
【发布时间】:2013-04-09 15:53:09
【问题描述】:

在进行比较之前是否需要将TIMESTAMP 转换为DATE?例如:

AND SORD.CREATED >= TO_DATE(FROM_TZ(CAST(TO_DATE('','DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP), 'Asia/Kuala_Lumpur') AT TIME ZONE 'UTC','DD-MON-YYYY HH24:MI:SS')
AND SORD.CREATED < TO_DATE(FROM_TZ(CAST(TO_DATE('','DD-MON-YYYY HH24:MI:SS') AS TIMESTAMP), 'Asia/Kuala_Lumpur') AT TIME ZONE 'UTC','DD-MON-YYYY HH24:MI:SS')

只是想征求意见,因为我还是新手,还在学习数据库。

【问题讨论】:

  • 你用的是什么数据库?
  • @MarcoForberg TO_DATE() 是 oracle 或 db2 函数,但看起来 from_tz() 只是 oracle。现在已适当标记。
  • @MarcoForberg 我正在使用 SQL Developer 和 oracle db

标签: sql oracle date timezone timestamp


【解决方案1】:

很难准确地说出您使用的是什么数据库。根据您提供的代码中的功能,我猜是 Oracle?请确认。

总的来说,我可以告诉你以下几点:

  • 您没有传递任何值。 TO_DATE 的第一个参数是空的,它将包含要转换为日期的字符串。

  • 您需要知道数据库中的值是什么。 SORD.CREATEDDATE 还是 TIMESTAMP 数据类型?它是否保持 UTC 值?如果是这样,那么是的,您应该在查询之前将本地时间转换为 UTC。如果可能,您应该在查询本身之外执行此操作。

  • 如果您的数据库中的值是TIMESTAMP WITH TIME ZONE 类型,那么您可以使用DATETIMESTAMPAT TIME ZONE 函数,就像您在问题中显示的那样。

  • 不要对字符串进行不必要的转换。如果您的源数据已经是 DATETIMESTAMP 数据类型,则无需转换为字符串。一旦日期成为日期,您就应该保持日期。引入字符串格式有时会引入错误。

【讨论】:

  • 是的。我正在使用 oracle 数据库。我知道输入是空的。我正在使用这部分代码生成一段时间的报告。我知道数据库使用的是 UTC,但不确定数据类型是时间戳还是日期时间。有没有办法确认数据类型?我想知道我们是否可以比较时间戳和日期时间而不会发生错误/偏移。
  • 只有你自己知道你在存储什么。如果不是您的数据库,请查看表定义,并检查一些值。或者与数据库所属的任何人交谈。
猜你喜欢
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多