Ik wil een query uitvoeren met sysdate zoals:
select up_time from exam where up_time like sysdate
wat mogelijk is in Oracle.
Het lijkt er echter op dat PostgreSQL sysdate niet ondersteunt. Ik kon sysdate niet vinden in de postgres-documentatie. Wat is de vervanging voor sysdate in PostgreSQL?
Antwoord 1, autoriteit 100%
SYSDATE
is alleen een Oracle-functie.
De ANSI-standaard definieert current_date
of CURRENT_TIMESTAMP
die wordtondersteund door Postgres en gedocumenteerd in de handleiding:
http://www.postgresql.org/ docs/current/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
(Btw: Oracle ondersteunt ook CURRENT_TIMESTAMP
)
Let op het verschil tussen CURRENT_TIMESTAMP
, statement_timestamp()
en clock_timestamp()
(dit wordt uitgelegd in de handleiding, zie de bovenstaande link)
Het deel where up_time like sysdate
geenzin heeft. Noch in Oracle, noch in Postgres. Als je rijen van “vandaag” wilt krijgen, heb je zoiets nodig als:
select up_time
from exam
where up_time = current_date
Houd er rekening mee dat u in Oracle waarschijnlijk wilt dat trunc(up_time) = trunc(sysdate)
het tijdsdeel verwijdert dat altijd in Oracle zit.
Antwoord 2, autoriteit 12%
NOW()is de vervanging van Oracle Sysdate in Postgres.
Probeer “Selecteer nu()“, dit geeft je de tijdstempel van het systeem.
Antwoord 3, autoriteit 9%
De volgende functies zijn beschikbaar om de huidige datum en/of tijd in PostgreSQL te verkrijgen:
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
Voorbeeld
SELECT CURRENT_TIME;
08:05:18.864750+05:30
SELECT CURRENT_DATE;
2020-05-14
SELECT CURRENT_TIMESTAMP;
2020-05-14 08:04:51.290498+05:30
Antwoord 4, autoriteit 3%
Misschien wilt u statement_timestamp()gebruiken. Dit geeft het tijdstempel waarop de instructie is uitgevoerd. Terwijl NOW()
en CURRENT_TIMESTAMP
het tijdstempel geven waarop de transactie is gestart.
Meer details in de handleiding