Dynamisch filteren van Exact Online accounts in PSQL

In een PSQL module die ik in Invantive Cloud gebruik om account- en item-gegevens te exporteren naar een .csv bestand, wil ik graag enkel regels ophalen waar Modified gelijk is aan vandaag. Door deze kolom te vergelijken met sysdate of GETDATE() zou dit moeten werken, maar in zowel de GETDATE()-functie als in de Modified-kolom in Exact Online zijn zowel een datum- als tijdcomponent opgenomen.

Door Date(modified) te gebruiken zou ik verwachten enkel de datumcomponent op te nemen, maar dat is niet het geval.

Hoe zou ik deze datums het beste met elkaar kunnen vergelijken?

Het meest efficient is om de vergelijking zo te maken dat server-side filtering en indexen gebruikt kunnen worden. Dit kan bijvoorbeeld met:

select ...
from   exactonlinerest..items
where  modified >= trunc(sysdate)
and      modified < trunc(sysdate ) + 1

Merk op dat sysdate uitgedrukt wordt in de tijdzone van de Invantive Cloud-server (Ierland), maar bij een on-premises installatie van Query Tool is de daar lokale tijd.

Sysdateutc is altijd in UTC (Z), onafhankelijk van de locatie.

Bij Exact Online kan of het filter wat breder gemaakt worden (als dat past bij het doel), of opgevraagd met bijvoorbeeld:

select ServerTime
,      ServerUtcOffset
from   me

De ServerUtcOffset in seconden kan gecorrigeerd worden boven op sysdateutc door hem er bij op te tellen na deling door 86400.

Maar in alle gevallen geldt dat er altijd meerdere seconden of minuten verschil kunnen zijn tussen verschillende servers, ondanks NTP en andere mechanismen. Hou hiermee rekening in het filter.

Heel erg bedankt, door gebruik te maken van trunc(sysdate) werkt het inmiddels prima!

Dit topic is 7 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.