寻求将查询从 DB2 转换为 Oracle 的帮助。我正在使用现有的 SQL 查询添加到新报告中,但该报告查询是用 DB2 SQL 编写的。我正在尝试将其转换为 Oracle,但在如何设置日期方面存在问题。
trunc_timestamp(CASE ......
ELSE ((
CASE
WHEN
TRFRDATE IS NULL OR
TRFRTIME IS NULL
THEN
NULL
ELSE timestamp(substr(char(TRFRDATE),1,4) || '-' ||
substr(char(TRFRDATE),5,2) || '-' || substr(char(TRFRDATE),7,2)
|| '-' || substr(digits(TRFRTIME),2) || '.' ||
substr(digits(TRFRTIME),3,2) || '.' || substr(digits(TRFRTIME),2)
|| '.000000')
END) + (-1) DAY)
END,'dd') AS "NewOrderDate",
上面可以看到,我有一个case语句,会转成时间戳,难的部分是最后一部分,计算完时间戳后,我需要减去-1天,这就是我不断下降的地方陷入一个或另一个错误。
需要说明的是,上述查询的 ELSE 部分只是连接日期和时间并转换为时间戳。任何帮助解决这个问题都会很棒。
编辑:我现在的查询是这样的,我收到以下错误:小时必须在 1 到 12 之间
SELECT CASE
WHEN
CASE
WHEN
CARRSERV IN ('1DYT','1PRT','SATN')
THEN 1
WHEN
CARRSERV IN ('2DYT','SAT2')
THEN 2
ELSE 3
END = 1 AND
TO_CHAR(
CASE
WHEN TFRDATE IS NULL OR TFRTIME IS NULL THEN NULL
ELSE TO_TIMESTAMP(substr(TFRDATE,2) || '-' || substr(TFRDATE,4,3) || '-' ||
substr(TFRDATE,8,2) || ' ' || substr(TFRTIME,2) || '.' ||
substr(TFRTIME,2) || '.' || substr(TFRTIME,2))
END,'hh24:mi:ss') > TO_CHAR('17:00:00','hh24:mi:ss')
THEN
CASE
WHEN TFRDATE IS NULL OR TFRTIME IS NULL THEN NULL
ELSE TO_TIMESTAMP(substr(TFRDATE,2))
END
END AS NEW_DATE from table