2017-10-18 13 views
0

Je souhaite additionner et soustraire deux colonnes d'horodatage ou plus.Comment puis-je additionner/soustraire des valeurs de temps de la même ligne?

J'utilise PostgreSQL et j'ai une structure que vous pouvez voir: enter image description here

Je ne peux pas arrondir les minutes ou secondes, donc je suis en train d'extraire le EPOCH et de faire l'opération après, mais j'obtiens toujours une erreur parce que le premier EXTRACT reconnaît la colonne, mais quand je mets la deuxième EXTRACT dans la même commande SQL j'obtiens un message d'erreur disant que la deuxième colonne n'existe pas.

Je vais vous donner un exemple:

SELECT 
    EXAMPLE.PERSON_ID, 
    COALESCE(EXTRACT(EPOCH from EXAMPLE.LEFT_AT),0) + 
    COALESCE(EXTRACT(EPOCH from EXAMPLE.ARRIVED_AT),0) AS CREDIT 
FROM 
    EXAMPLE 
WHERE 
    EXAMPLE.PERSON_ID = 1; 

Dans cet exemple, je recevrais une erreur comme:

Colonne ARRIVED_AT n'existe pas

Pourquoi cela se produit ? Pourrais-je additionner/soustraire des valeurs de temps de la même ligne?

+0

Pouvez-vous afficher la structure actuelle de cette table? De l'outil populaire comme psql ou pgadmin. –

Répondre

1

Est-ce que ARRIVED_AT est une valeur calculée au lieu d'une colonne? Qu'avez-vous exécuté pour obtenir l'image des résultats de la requête que vous avez publiée en affichant ces colonnes?

Le script suivant fait ce que vous attendez, donc il y a quelque chose à propos de la structure de la table que vous interrogez que n'est pas ce que vous attendez.

CREATE SCHEMA so46801016; 
SET search_path=so46801016; 
CREATE TABLE trips (
    person_id serial primary key, 
    arrived_at time, 
    left_at time 
); 

INSERT INTO trips (arrived_at, left_at) VALUES 
    ('14:30'::time, '19:30'::time) 
, ('11:27'::time, '20:00'::time) 
; 

SELECT 
    t.person_id, 
    COALESCE(EXTRACT(EPOCH from t.left_at),0) + 
    COALESCE(EXTRACT(EPOCH from t.arrived_at),0) AS credit 
FROM 
    trips t; 

DROP SCHEMA so46801016 CASCADE;