Sql 在转换为UTC时获取上月存在的所有行

Sql 在转换为UTC时获取上月存在的所有行,sql,oracle,timezone,utc,Sql,Oracle,Timezone,Utc,因此,我尝试获取与上个月的日期相关的所有行(即,在一个月的第一个月和最后一个月之间)。我还尝试在执行此操作时转换为UTC 我有两种方法: WHERE ARRIVE_DT_TM BETWEEN CCLSQL_CNVTDATETIMEUTC(TRUNC(ADD_MONTHS(SYSDATE, -1),'MM'),1,126,1) AND CCLSQL_CNVTDATETIMEUTC(TRUNC(SYSDATE,'MM')-(1/86400),1,126,1) 下面是我的另一种方法,但我不知道把转换

因此,我尝试获取与上个月的日期相关的所有行(即,在一个月的第一个月和最后一个月之间)。我还尝试在执行此操作时转换为UTC

我有两种方法:

WHERE ARRIVE_DT_TM BETWEEN CCLSQL_CNVTDATETIMEUTC(TRUNC(ADD_MONTHS(SYSDATE, -1),'MM'),1,126,1) AND CCLSQL_CNVTDATETIMEUTC(TRUNC(SYSDATE,'MM')-(1/86400),1,126,1)
下面是我的另一种方法,但我不知道把转换命令放在哪里

WHERE ARRIVE_DT_TM BETWEEN ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1) AND LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)+1)

有什么想法吗?有更好的方法吗?

假设列的数据类型
arrival\u DT\u TM
是带时区的
时间戳
或带本地时区的
时间戳
,我建议这样做:

WHERE ARRIVE_DT_TM BETWEEN
   FROM_TZ(CAST(TRUNC(ADD_MONTHS(SYSDATE,-1), 'MM') AS TIMESTAMP), TO_CHAR(SYSTIMESTAMP, 'tzr') ) AND
   FROM_TZ(CAST(LAST_DAY(TRUNC(ADD_MONTHS(SYSDATE,-1))) AS TIMESTAMP), TO_CHAR(SYSTIMESTAMP, 'tzr'))
需要进行一些转换,因为
添加月份
最后一天
返回一个
日期
值。但是,
DATE
值没有时区信息,并且
FROM_TZ
需要
时间戳

SYSDATE
SYSTIMESTAMP
在数据库服务器操作系统的时区中给出,因此您可以组合使用

不需要显式转换为UTC。在内部,
时间戳与{LOCAL}时区
的所有比较都是在UTC上执行的

如果列
arrival\u DT\u TM
日期
值,则可以将其转换为带时区的
时间戳,即

WHERE FROM_TZ(CAST(ARRIVE_DT_TM AS TIMESTAMP), <time zone>) BETWEEN ...
WHERE FROM_TZ(CAST(作为时间戳到达)。。。

输入有效的
,应用程序必须知道这一点。同样,不需要显式转换为UTC。

用您正在使用的数据库标记您的问题。Oracle
日期
数据类型没有时区信息,因此原则上不可能将
日期
值转换为UTC时间。什么是
arrival\u DT\u TM
的数据类型?