2010-02-04 12 views
0

Je travaille sur une base de données DB2 et tente d'obtenir des enregistrements par date d'entrée en vigueur. Le seul hic, c'est que les champs de la date effective sont répartis sur 4 colonnes (mois, jour, siècle, année). Je pense que j'ai trouvé la date dans le select, mais quand j'ajoute la clause where, j'ai des problèmes. (Notez que j'utilise la commande chiffres pour pad, car l'année 2005 donne seulement 5 dans le domaine de l'année)Date d'entrée en vigueur où la date s'étend sur plusieurs colonnes

select date(concat(digits(vsmo),concat('/',concat(digits(vsdy),  
concat('/',concat(digits(vsct),digits(vsyr))))))) from 
ddpincgr d 
where (SELECT MAX(<NOT SURE WHAT TO PUT IN HERE>) FROM ddpincgr a WHERE a.vgrno = d.vgrno) <= date('1/1/2000') 

Idées?

Répondre

0

Vous ne pouvez pas simplement mettre la concaténation entière dans le select?

select date(concat(digits(vsmo),concat('/',concat(digits(vsdy), concat('/',concat(digits(vsct),digits(vsyr))))))) 
from ddpincgr d 
where (SELECT MAX(date(concat(digits(vsmo),concat('/',concat(digits(vsdy), concat('/',concat(digits(vsct),digits(vsyr)))))))) 
      FROM ddpincgr a 
      WHERE a.vgrno = d.vgrno) <= date('1/1/2000') 
+0

essayé de faire cela, mais rien ne revient. –

+0

peut-être qu'il n'y a rien qui satisfait à la condition. –

1

le transformer en une sous-requête

select * 
from (select date(concat(digits(vsmo),concat('/',concat(digits(vsdy),  
concat('/',concat(digits(vsct),digits(vsyr))))))) as myDate from 
ddpincgr d) as myTable 
where max(myTable.myDate) <= date('1/1/2000')