请求帮助将 DB2 sql 转换为 Oracle

寻求将查询从 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 
womeshi 回答:请求帮助将 DB2 sql 转换为 Oracle

如果我做对了,你会截断任何小时/分钟/秒/...部分,所以从一开始就忽略它。

您可以简单地使用 to_date() 将字符串转换为 date

...
to_date(trfrdate,'YYYYMMDD') - 1 AS "NewOrderDate"
...

但是你真的应该考虑使用适当的数据类型,字符串类型不适合日期/时间,日期/时间类型是。例如,您可以使用一个 date 列而不是 trfrdatetrfrtime

这是一个 CASE 表达式,而不是一个语句。 SQL 根本不知道控制流语句。

本文链接:https://www.f2er.com/7283.html

大家都在问