需要此字段为原始数字;不是字符串

时间:2014-05-05 22:37:23

标签: sql ibm-midrange db2-400

在此查询中,IBM I上的字段UAFLWD被定义为数字8 0.它实际上是一个日期字段YYYYMMDD。下面的代码将格式更改为STRING,现在名为FOLLOWUP。 实际上我希望这是NUMBER,因为在报告工具中,我想只包括date =到当前日期和之前的日期。如何将此FOLLOWUP定义为数字?

SELECT                                                                              
  ALL       T01.UAUSRN,                                                             
            SUBSTR(DIGITS(UAFLWD),5,2) CONCAT '/' CONCAT SUBSTR(DIGITS(UAFLWD)      
            ,7,2) CONCAT '/' CONCAT SUBSTR(DIGITS(UAFLWD),3,2) AS FOLLOWUP,         
            (T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL,  T02.ADLNM, T02.ADFNM,         
            T01.UAFLWD                                                              
  FROM      ASTDTA.NOTEHDUA T01 INNER JOIN                                            
            ASTDTA.ADRESsad T02                                                       
  ON        UAENT# = ADENT#                                                         
    AND     UASFX# = ADSFX#                                                         
  WHERE     UAFLWD BETWEEN 20000101 AND 20991231                                    
    AND     UAPRGD < 1                                                              
    AND     UANOTT = 'E'                                                            
  ORDER BY  001 ASC, 008 ASC                                   

2 个答案:

答案 0 :(得分:1)

你到底想要什么?根据你的问题,它已经是数字,所以只需选择它而不进行任何转换:

SELECT
  ALL       T01.UAUSRN, UAFLWD AS FOLLOWUP,
            (T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL,  T02.ADLNM, T02.ADFNM,         
            T01.UAFLWD                                                              
  FROM      ASTDTA.NOTEHDUA T01 INNER JOIN                                            
            ASTDTA.ADRESsad T02                                                       
  ON        UAENT# = ADENT#                                                         
    AND     UASFX# = ADSFX#                                                         
  WHERE     UAFLWD BETWEEN 20000101 AND 20991231                                    
    AND     UAPRGD < 1                                                              
    AND     UANOTT = 'E'                                                            
  ORDER BY  001 ASC, 008 ASC                                   

编辑我刚刚注意到UAFLWD已经包含在选择列表中而没有在示例SQL中进行转换。

答案 1 :(得分:0)

首先想到的是使用cast()

SELECT                                                                              
  ALL       T01.UAUSRN,                                                             
            CAST(SUBSTR(DIGITS(UAFLWD),5,2) CONCAT SUBSTR(DIGITS(UAFLWD),7,2) CONCAT 
                 SUBSTR(DIGITS(UAFLWD),3,2) AS INTEGER
                ) AS FOLLOWUP,         
            (T01.UAENT#), T01.UASFX#, T02.ADENTN, T01.UANOTT, T01.UANOTL,  T02.ADLNM, T02.ADFNM,         
            T01.UAFLWD  

这是否可以解决您的问题?