Sql 子串(ordtim,3,4)) 以dltim2结束, 俄瑞斯特, ordv#ordv#, 兽人, 矿石数量, orspec, orstp#orstp#, 奥科姆, (案例 当mmtotal不为空时,则为mmtotal 其他0 完)总计,, orwgt, 奥洛蒂, 奥罗斯特, 秩序, 奥德斯特, orara asarea, orpdrv oprdrv, 世界#世界#, ordsp#ordsp#, 奥什德, 奥什特, 朝鲜民主主义人民共和国, (案例 当equipmentnumber不为空时,则equipmentnumber 否则“ 完)设备编号, (案例 当apptreq不为NULL时,则apptreq 否则 完)apptreq,, (案例 当ApptMode不为NULL时,则ApptMode 否则 (完)apptmade,, (案例 当ununit不为NULL时,则为ununit 否则“ (完)联合国大学, (案例 当unsupr不为NULL时,则unsupr 否则“ 完)asdrmgr,, (案例 如果unfmgr不为NULL,则为unfmgr 否则“ 完)asflmgr,, (案例 当untr1不为NULL时,则untr1 否则“ (完)1 来自iesqafile.opplan 左外连接iesqafile.order d 关于d.orodr#=opord# 左外接 关于mmord#=d.orodr# 左外连接第一行 关于d.orodr#=Oord# 左外联接停止组 关于d.orodr#=停止命令 左外连接iesqafile.units 关于ununit=d.orpdrv

Sql 子串(ordtim,3,4)) 以dltim2结束, 俄瑞斯特, ordv#ordv#, 兽人, 矿石数量, orspec, orstp#orstp#, 奥科姆, (案例 当mmtotal不为空时,则为mmtotal 其他0 完)总计,, orwgt, 奥洛蒂, 奥罗斯特, 秩序, 奥德斯特, orara asarea, orpdrv oprdrv, 世界#世界#, ordsp#ordsp#, 奥什德, 奥什特, 朝鲜民主主义人民共和国, (案例 当equipmentnumber不为空时,则equipmentnumber 否则“ 完)设备编号, (案例 当apptreq不为NULL时,则apptreq 否则 完)apptreq,, (案例 当ApptMode不为NULL时,则ApptMode 否则 (完)apptmade,, (案例 当ununit不为NULL时,则为ununit 否则“ (完)联合国大学, (案例 当unsupr不为NULL时,则unsupr 否则“ 完)asdrmgr,, (案例 如果unfmgr不为NULL,则为unfmgr 否则“ 完)asflmgr,, (案例 当untr1不为NULL时,则untr1 否则“ (完)1 来自iesqafile.opplan 左外连接iesqafile.order d 关于d.orodr#=opord# 左外接 关于mmord#=d.orodr# 左外连接第一行 关于d.orodr#=Oord# 左外联接停止组 关于d.orodr#=停止命令 左外连接iesqafile.units 关于ununit=d.orpdrv,sql,view,db2,ibm-midrange,Sql,View,Db2,Ibm Midrange,第一个错误是因为在两个主SELECT语句(联合在一起)中,您有不同的列名-因此视图不知道如何称呼它们,并要求您显式命名它们,例如,每个语句中的第一列: SELECT a.orodr# orodr_ ... SELECT d.orodr# as ordddd ... 对于第二个错误,ORPTIM列的数据类型是什么 我猜这种类型的构造导致了这个问题: CASE orptim WHEN 0 THEN Varchar(0) ELSE CO

第一个错误是因为在两个主SELECT语句(联合在一起)中,您有不同的列名-因此视图不知道如何称呼它们,并要求您显式命名它们,例如,每个语句中的第一列:

SELECT a.orodr# orodr_ ...
SELECT d.orodr# as ordddd ...
对于第二个错误,ORPTIM列的数据类型是什么

我猜这种类型的构造导致了这个问题:

CASE orptim
        WHEN 0
            THEN Varchar(0)
            ELSE CONCAT(CONCAT(SUBSTRING(orptim, 1, 2), ':'), SUBSTRING(orptim, 3, 4))

如果orptim是一个数字/小数,那么“WHEN 0”将起作用,但“SUBSTRING(orptim,1,2)”将不起作用-因为您不能将数字作为子字符串。如果orptim是一个字符串,那么“WHEN 0”w=可能会引起问题。

谢谢,我理解了有关列标题的部分。由于Orptim是一个十进制数,将char typecaset添加到代码中会解决这个问题吗?例如:CASE orptim WHEN 0然后Varchar(0)ELSE CONCAT(CONCAT(SUBSTRING(char(orptim),1,2),“:”),SUBSTRING(char(orptim),3,4))可能会工作,但前提是十进制值始终包含至少4位数字。如果没有,那么您需要格式化这些值,以便您的子字符串返回您需要的值,例如,用零填充值,非常感谢您的帮助!!因此,问题是orptim是一个长度为4的字符,它似乎包含转换为字符的数字数据类型。所以0应该是0000。再次感谢。如果没有你的帮助,我永远不会明白。
create view pavt.v1 (v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28,v29,v30,v31,v32,v33,v34,v35,v36) as
 Message . . . . :   Select or omit error on field                             
   Cast(Translate(ORDER_14.ORPTIM, *UNNAMED Table) AS member V.                
 Cause . . . . . :   A select or omit error occurred in record 0, record format
   *FIRST, member number 1 of file V in library PAVT, because of condition 1 of
   the following conditions:                                                   
     1 - The data was not valid in a decimal field.                            
create view pavt.CCC1 as
WITH firstequiprrn 
     AS (SELECT oeord#      equiporder, 
                Min(RRN(a)) firstrow 
         FROM   iesqafile.OPEQUIP    a 
         GROUP  BY oeord# 
         ORDER  BY 1), 
     firstequiprow 
     AS (SELECT oeord#, 
                oetrlr equipmentnumber 
         FROM   firstequiprrn 
                INNER JOIN iesqafile.OPEQUIP    b 
                        ON equiporder = oeord# 
                           AND firstrow = RRN(b)), 
     ordermiles 
     AS (SELECT mmord#, 
                mmtotal 
         FROM   iesqafile.mmiles 
         WHERE  mmord# IN(SELECT orodr# 
                          FROM   iesqafile.order) 
                AND mmrectype = 'O' 
                AND mmdsp# = '00'), 
     stopgroup 
     AS (SELECT soord       stoporder, 
                COUNT(*)    stopsremain, 
                Min(sostp#) nextstop, 
                Max(soappr) apptreq, 
                Max(soaptm) apptmade 
         FROM   iesqafile.stopoff 
                INNER JOIN iesqafile.order 
                        ON orodr# = soord 
         WHERE  soardt = 0 
         GROUP  BY soord 
         ORDER  BY 1) SELECT a.orodr# orodr_, 
       orcust, 
       orldat, 
       CASE orpdat 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orpdat), 'YYYY-MM-DD') 
       END      erdat2, 
       CASE orptim 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(char(orptim), 1, 2), ':'), 
              SUBSTRING(char(orptim), 3, 4)) 
       END      AS ertim2, 
       CASE orapdt 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orapdt), 'YYYY-MM-DD') 
       END      ltdat2, 
       CASE oraptm 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(oraptm, 1, 2), ':'), 
              SUBSTRING(oraptm, 3, 4)) 
       END      AS lttim2, 
       CASE orddat 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orddat), 'YYYY-MM-DD') 
       END      dldat2, 
       CASE ordtim 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(ordtim, 1, 2), ':'), 
              SUBSTRING(ordtim, 3, 4)) 
       END      AS dltim2, 
       orestr, 
       a.ordv#  ordv_, 
       orcons, 
       oreqty, 
       orspec, 
       a.orstp# orstp_, 
       orcomc, 
       ( CASE 
           WHEN mmtotal IS NOT NULL THEN mmtotal 
           ELSE 0 
         END )  mmtotal, 
       orwgt, 
       orocty, 
       orost, 
       ordcty, 
       ordst, 
       orara    asarea, 
       orpdrv   oprdrv, 
       orld#    orld_, 
       ordsp#   ordsp_, 
       orshdt, 
       orshtm, 
       ornwpk, 
       ( CASE 
           WHEN equipmentnumber IS NOT NULL THEN equipmentnumber 
           ELSE '' 
         END )  EquipmentNumber, 
       ( CASE 
           WHEN apptreq IS NOT NULL THEN apptreq 
           ELSE 'N' 
         END )  apptreq, 
       ( CASE 
           WHEN apptmade IS NOT NULL THEN apptmade 
           ELSE 'N' 
         END )  apptmade, 
       ( CASE 
           WHEN ununit IS NOT NULL THEN ununit 
           ELSE ' ' 
         END )  UNUNIT, 
       ( CASE 
           WHEN unsupr IS NOT NULL THEN unsupr 
           ELSE ' ' 
         END )  asdrmgr, 
       ( CASE 
           WHEN unfmgr IS NOT NULL THEN unfmgr 
           ELSE ' ' 
         END )  asflmgr, 
       ( CASE 
           WHEN untrl1 IS NOT NULL THEN untrl1 
           ELSE ' ' 
         END )  UNTRL1 
FROM   iesqafile.order a 
       LEFT OUTER JOIN ordermiles 
                    ON mmord# = a.orodr# 
       LEFT OUTER JOIN firstequiprow 
                    ON a.orodr# = oeord# 
       LEFT OUTER JOIN stopgroup 
                    ON a.orodr# = stoporder 
       LEFT OUTER JOIN iesqafile.units 
                    ON ununit = a.orpdrv 
WHERE  orld# <> ordsp# 
       AND ( orspec = 'N# C' 
              OR orspec = 'N# P' ) 
       AND orpdrv <> '' 
       AND orpdat >= 2018001 
UNION 
SELECT d.orodr# orodr_, 
       orcust, 
       orldat, 
       CASE orpdat 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orpdat), 'YYYY-MM-DD') 
       END     erdat2, 
       CASE orptim 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(char(orptim), 1, 2), ':'), 
              SUBSTRING(char(orptim), 3, 4)) 
       END     AS ertim2, 
       CASE orapdt 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orapdt), 'YYYY-MM-DD') 
       END     ltdat2, 
       CASE oraptm 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(oraptm, 1, 2), ':'), 
              SUBSTRING(oraptm, 3, 4)) 
       END     AS lttim2, 
       CASE orddat 
         WHEN 0 THEN Varchar(0) 
         ELSE Varchar_format(CHAR(orddat), 'YYYY-MM-DD') 
       END     dldat2, 
       CASE ordtim 
         WHEN 0 THEN Varchar(0) 
         ELSE CONCAT(CONCAT(SUBSTRING(ordtim, 1, 2), ':'), 
              SUBSTRING(ordtim, 3, 4)) 
       END     AS dltim2, 
       orestr, 
       ordv# ordv_, 
       orcons, 
       oreqty, 
       orspec, 
       orstp# orstp_, 
       orcomc, 
       ( CASE 
           WHEN mmtotal IS NOT NULL THEN mmtotal 
           ELSE 0 
         END ) mmtotal, 
       orwgt, 
       orocty, 
       orost, 
       ordcty, 
       ordst, 
       orara asarea, 
       orpdrv oprdrv, 
       orld# orld_, 
       ordsp# ordsp_, 
       orshdt, 
       orshtm, 
       ornwpk, 
       ( CASE 
           WHEN equipmentnumber IS NOT NULL THEN equipmentnumber 
           ELSE ' ' 
         END ) EquipmentNumber, 
       ( CASE 
           WHEN apptreq IS NOT NULL THEN apptreq 
           ELSE 'N' 
         END ) apptreq, 
       ( CASE 
           WHEN apptmade IS NOT NULL THEN apptmade 
           ELSE 'N' 
         END ) apptmade, 
       ( CASE 
           WHEN ununit IS NOT NULL THEN ununit 
           ELSE ' ' 
         END ) UNUNIT, 
       ( CASE 
           WHEN unsupr IS NOT NULL THEN unsupr 
           ELSE ' ' 
         END ) asdrmgr, 
       ( CASE 
           WHEN unfmgr IS NOT NULL THEN unfmgr 
           ELSE ' ' 
         END ) asflmgr, 
       ( CASE 
           WHEN untrl1 IS NOT NULL THEN untrl1 
           ELSE ' ' 
         END ) UNTRL1 
FROM   iesqafile.opplan 
       LEFT OUTER JOIN iesqafile.order d 
                    ON d.orodr# = opord# 
       LEFT OUTER JOIN ordermiles 
                    ON mmord# = d.orodr# 
       LEFT OUTER JOIN firstequiprow 
                    ON d.orodr# = oeord# 
       LEFT OUTER JOIN stopgroup 
                    ON d.orodr# = stoporder 
       LEFT OUTER JOIN iesqafile.units 
                    ON ununit = d.orpdrv
SELECT a.orodr# orodr_ ...
SELECT d.orodr# as ordddd ...
CASE orptim
        WHEN 0
            THEN Varchar(0)
            ELSE CONCAT(CONCAT(SUBSTRING(orptim, 1, 2), ':'), SUBSTRING(orptim, 3, 4))