J'ai un tas d'enregistrements dans ma base de données Advantage qui a fini avec l'année 1909, plutôt que 2009. Comment peut-on exécuter une déclaration de mise à jour qui va ajouter 100 ans à chaque de ces dates? (Avantage me dit qu'il n'y a pas de fonction "str()", et il ne me laisse pas concaténer mois (mydate) avec "/"comment puis-je ajouter 100 ans à une date dans la base de données Advantage
Répondre
vous pouvez utiliser les éléments suivants
UPDATE mytable
SET mydate = CAST(TIMESTAMPADD(SQL_TSI_YEAR, 100, datefield) as SQL_DATE)
WHERE YEAR(datefield) = 1909
(si vous avez un champ d'horodatage et non un champ de date, vous pouvez laisser le CAST .. AS SQL_DATE)
Pour concaténer vous devez concaténer des chaînes pour changer une chaîne, vous pouvez utiliser CAST ou CONVERT
UPDATE mytable
SET datefield = CAST (TRIM(CAST(MONTH(datefield) AS SQL_CHAR)) + '/' + TRIM(CAST(DAYOFMONTH(datefield) AS SQL_CHAR)) + '/2009' AS SQL_DATE)
WHERE YEAR(datefield) = 1909
(si vous avez un champ d'horodatage et non un champ de date, vous pouvez laisser le CAST ... AS SQL_DATE, mais alors vous devez ajouter à nouveau dans le temps)
Mon SQL est rouillé mais la base de données Advantage semble prendre en charge DATEADD. ... euh ... quelque chose comme ça?
UPDATE mytable
SET field = DATEADD(Year, 100, field)
FROM mytable
WHERE field < '19100101'
dateadd() me donne une erreur ... peut-être qu'une chose V10? (Je suis toujours sur 9.1) –
ah, c'était le sql_char qui me manquait. Merci! –