gpt4 book ai didi

sql - 如何在不使用子查询的情况下从oracle函数中提取年或月,日?

转载 作者:搜寻专家 更新时间:2023-10-30 23:26:14 28 4
gpt4 key购买 nike

我有下面的查询不适合我,

这个函数 from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS'),
substr(UTC_TIME_CODE_OFFSET,1,3)||':'||'00') 在本地作为 local_tstz
当我尝试使用 TO_CHAR(from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS') 从这个函数中提取日期时,允许我将时区从不同的 reguins 转换为本地时区,
substr(UTC_TIME_CODE_OFFSET,1,3)||':'||'00') 在本地作为 local_tstz,'DD'
)这是不可能的,因为它不是真正的列,我最终创建了新的子查询,我最终创建了许多子查询,我想避免这种情况,因为它使查询变得复杂并且使查询花费更长的时间,

select from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS'), 
substr(UTC_TIME_CODE_OFFSET,1,3)||':'||'00'),
from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS'),
substr(UTC_TIME_CODE_OFFSET,1,3)||':'||'00') at local as local_tstz,
to_char(from_tz(to_timestamp(START_TIME, 'YYYYMMDDHH24MISS'),
substr(UTC_TIME_CODE_OFFSET,1,3)||':'||'00') at local as local_tstz,'DD')
from TAPIN_201906@billingdb;

最佳答案

我无法在 19c 版本中重现您的问题,否则我无法理解。无论如何,三点意见:

1) 如果您的 START_TIME 真的是一个字符串,那根本不是一个好主意。使用真实的 DATE 或 TIMESTAMP 数据类型。在您看来,我会将两列替换为具有 TIMESTAMP WITH TIME ZONE 数据类型的一列。事实上,由于时区偏移,您无法按日期正确排序。

2) 使用您当前的数据,您可以简化到本地时间戳的转换,我稍后会展示这一点。

3) 正如评论中指出的那样,EXTRACT 从 UTC 时间开始,而不是本地时间,因此我将解决方案改回 TO_CHAR。

with data(START_TIME, UTC_TIME_CODE_OFFSET) as (
select '20001112012345', '+02' from dual
)
select
to_timestamp_TZ(
START_TIME || substr(UTC_TIME_CODE_OFFSET,1,3),
'YYYYMMDDHH24MISSTZH'
) at local as local_ts,
to_char(
to_timestamp_TZ(
START_TIME || substr(UTC_TIME_CODE_OFFSET,1,3),
'YYYYMMDDHH24MISSTZH'
)
,'DD'
) as to_char_day,
extract(
day from
to_timestamp_TZ(
START_TIME || substr(UTC_TIME_CODE_OFFSET,1,3),
'YYYYMMDDHH24MISSTZH'
)
) as extract_day
from data;

LOCAL_TS TO_CHAR_DAY EXTRACT_DAY
2000-11-12 00:23:45,000000000 EUROPE/PARIS 12 11

最好的问候,炖阿什顿

关于sql - 如何在不使用子查询的情况下从oracle函数中提取年或月,日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com