Comment ajouter un nombre de jours dynamique (basé sur une colonne) à MAINTENANT?
SELECT NOW() + INTERVAL a.number_of_days "DAYS" AS "The Future Date"
FROM a;
Où a.number_of_days
est un entier?
Je multiplie généralement le nombre par interval '1 day'
ou similaire, par exemple:
select now() + interval '1 day' * a.number_of_days from a;
Je sais que cela a un an, mais si vous devez utiliser une colonne pour spécifier l'intervalle réel (par exemple, `` jours '', `` mois '', alors il vaut la peine de savoir que vous pouvez également CAST votre chaîne à un intervalle, donnant:
SELECT now()+ CAST(the_duration||' '||the_interval AS Interval)
Donc, la question d'origine deviendrait:
SELECT now() + CAST(a.number_of_days||" DAYS" AS Interval) as "The Future Date" FROM a;
Je préfère cette façon. Je pense que c'est assez facile et propre. Dans postgre, vous avez besoin de interval
pour utiliser +
opérateur avec timestamp
select (3||' seconds')::interval;
select now()+ (10||' seconds')::interval,now();
où vous pouvez utiliser des secondes, des minutes ... des jours, des mois ... et vous pouvez remplacer les chiffres de votre colonne.
select now()+ (column_name||' seconds')::interval,now()
from your_table;
Pour créer des intervalles basés sur des valeurs de colonne, je recommande d'ajouter deux colonnes dans votre tableau. Par exemple, la colonne "valeur_période" :: INT4 et la colonne "nom_période" :: VARCHAR. La colonne "nom_période" peut stocker les valeurs suivantes:
+ -------------- + ------------- + | period_value | nom_période | + -------------- + ------------- + | 2 | minute | + -------------- + ------------- +
Vous pouvez maintenant écrire:
SELECT NOW() - (period_value::TEXT || ' ' || period_name::TEXT)::INTERVAL FROM table;
Si nous avons un champ avec une valeur de chaîne d'intervalle telle que '41 ans 11 mois 4 jours 'et que nous voulons le convertir en date de naissance, utilisez cette requête:
UPDATE "february14" set dob = date '2014/02/01' - (patient_age::INTERVAL)
dob est le champ de date à convertir '41 ans 11 mois 4 jours' à '1972/10/14 ' par exemple
patient_age est un champ varchar qui a une chaîne comme '41 ans 11 mons 4 jours '
Et c'est une requête pour convertir l'âge en date de naissance
SELECT now() - INTERVAL '41 years 10 mons 10 days';