Problem solve Get help with specific problems with your technologies, process and projects.

Change from a Julian date to a "true" date for a search criteria index

Use an SQL index statement or view to write a query, or change your physical file definition to convert the Julian date column into a real date column.

When using the create index command on the AS/400, can you manipulate a Julian date to be a "true" date? So if you were to query that file (index) you could use that "true" date field in the index in your search criteria?
With V6R1, the SQL CREATE INDEX statement does allow you to create an index over an expression. The following index would convert a Julian date value stored in a decimal field into a date value which would be used as the index key value.

  Create Index mydate_ix on pf1 
      (date( case when substr(digits(jdatcol),1,2) > 
      '39' then '19' else '20' end concat digits(jdatcol)) ) 
However, the SQL standard prevents indexes from being referenced on an SQL query. So it would be better to move this derivation to an SQL view and then write your queries against the SQL view. Here's an example SQL view and a sample SELECT statement demonstrating how to query the view.

Create View myview as 
    (select col1, date( case when substr(digits(jdatcol),1,2) >
       '39' then '19' else '20' end concat digits(jdatcol)) 
  as datcol, col3 from pf1) 

SELECT col1 FROM myview where jdatcol >= CURRENT DATE 
Another alternative would be changing your physical file definition to change the Julian date column to a real date column. Then, you could create a LF that maps the date column back to it's original form. Existing applications could be changed to use the logical file and not have to be modified to support the date data type. All of your queries would then just reference the date field in the physical file.

Dig Deeper on iSeries database management

Start the conversation

Send me notifications when other members comment.

Please create a username to comment.