0

在进行比较之前我需要转换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')

只是在寻找意见,因为我还是新手并且正在学习数据库。

4

1 回答 1

1

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

一般来说,我可以告诉你以下几点:

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

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

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

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

于 2013-04-17T14:53:29.657 回答