In this query, the field UAFLWD, on the IBM I is defined as numeric 8 0. it is actually a date field, YYYYMMDD. This code below changes the format to STRING, called now FOLLOWUP. Actually I would like this to be NUMBER, because in the reporting tool, i want to include only dates = to the current date and previous. How can i define this FOLLOWUP to be a number?

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                                   
有帮助吗?

解决方案

What exactly are you looking for? According to your question it's already numeric so just select it without any conversion:

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                                   

EDIT I just noticed that UAFLWD is already included in the selection list without conversion in the sample SQL.

其他提示

The first thing that comes to mind is to use 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  

Does this work to solve your problem?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top