2016-12-03 2 views
0

Les dates sont stockées comme celui-ci dans une autre table VarcharsConvertir dates varchar (BC & AD) au format de date dans sql

select wkdocre from works; 
    wkdocre 
------------- 
+1654/12/31 
+1706/12/31 
+1667/12/31 
-0332/12/31 
-0332/12/31 
-1295/12/31 

Et je veux insérer ces dates dans une autre table avec un attribut qui est de type date de cette

update ns_works set wor_workcreationdate=(select wkdocre from works where wor_workcreationdate=wkdocre); 

Je reçois cette erreur

ERROR: operator does not exist: ns_workcreationdate = dateofcreation 
LINE 1: ...lect wkdocre from works where wor_workcreationdate=wkdocre); 
                  ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

-vous

Remerciez

résultats souhaités

select wor_creationdate from ns_works; 
    wor_creationdate 
------------- 
1654/12/31 
1706/12/31 
1667/12/31 
-0332/12/31 
-0332/12/31 
-1295/12/31 
+0

Modifiez votre question et affichez les résultats souhaités. Si vous voulez "insérer" quelque chose, pourquoi utilisez-vous 'update'? –

Répondre

0

Vous devez conversion explicite; essayez quelque chose comme ça:

... SET wor_workcreationdate = 
     to_date(
      (select wkdocre 
      from works 
      where wor_workcreationdate = to_date(wkdocre, 'YYYY/MM/DD')), 
      'YYYY/MM/DD' 
     ) 

Ecrire des années BC avec un signe moins est incorrect cependant; PostgreSQL interprétera -1295 comme 1296 BC, puisque l'année 0 est en réalité 1 BC. Vous souhaiterez peut-être corriger votre table works et utiliser YYYY/MM/DD BC comme spécificateur de format.