Nie ma różnicy. Trzy cytaty z instrukcji:
1)
Te standardowe funkcje SQL zwracają wszystkie wartości w oparciu o czas rozpoczęcia bieżącej transakcji:
...
...
CURRENT_TIMESTAMP
2)
transaction_timestamp()
jest równoważne CURRENT_TIMESTAMP
, ale ma nazwę, która wyraźnie odzwierciedla to, co zwraca.
3)
now()
jest tradycyjnym odpowiednikiem PostgreSQL transaction_timestamp()
.
Odważny nacisk moje. CURRENT_TIMESTAMP
, transaction_timestamp()
I now()
robić dokładnie to samo. CURRENT_TIMESTAMP
jest składniową osobliwością funkcji, która nie ma końcowej pary nawiasów. Jest to zgodne ze standardem SQL.
Jeśli nie zadeklarujesz aliasu kolumny dla wywołania funkcji w instrukcji SQL, domyślnym aliasem jest nazwa funkcji. Wewnętrznie CURRENT_TIMESTAMP
implementowany jest standardowy SQL now()
. Do Postgres 9.6, który pojawia się w wynikowej nazwie kolumny , która była „teraz”, ale zmieniła się na „current_timestamp” w Postgres 10.
transaction_timestamp()
robi to samo, ale ta jest prawidłową funkcją Postgres, więc domyślnym aliasem zawsze był „znak_transakcji”.
Nie należy mylić żadnej z tych funkcji ze specjalną stałą wejściową'now'
. To tylko jeden z kilku skrótów notacyjnych dla określonych wartości daty / godziny / znacznika czasu, cytując instrukcję:
... które zostaną odczytane podczas odczytu do zwykłych wartości daty / godziny. (W szczególności now
powiązane ciągi znaków są konwertowane na określoną wartość czasu, gdy tylko zostaną odczytane.) Wszystkie te wartości muszą być ujęte w pojedyncze cudzysłowy, gdy są używane jako stałe w poleceniach SQL.
Może to zwiększyć zamieszanie, że (do co najmniej Postgres 12) dowolna liczba początkowych i końcowych spacji i nawiasów ( {[( )]}
) jest przycinana z tych specjalnych wartości wejściowych. Tak więc 'now()'::timestamptz
- lub tylko 'now()'
tam, gdzie nie jest wymagany rzut typu jawnego - jest również poprawny i now()
w większości kontekstów dokonuje oceny według tego samego znacznika czasu co funkcja . Ale są to stałe i zazwyczaj nie są to, na przykład, domyślne kolumny.
db <> skrzypce tutaj
Stare skrzypce SQL
Ważnymi alternatywami są statement_timestamp()
i clock_timestamp()
. Instrukcja:
statement_timestamp()
zwraca czas rozpoczęcia bieżącej instrukcji (dokładniej czas otrzymania ostatniej wiadomości polecenia od klienta). [...]
clock_timestamp()
zwraca aktualny aktualny czas, a zatem jego wartość zmienia się nawet w ramach jednego polecenia SQL.
Uwaga: statement_timestamp()
jest STABLE
jak powyżej (zawsze zwraca tę samą wartość w ramach tego samego polecenia SQL). Ale clock_timestamp()
koniecznie jest tylko VOLATILE
. Różnica może być znacząca.
where items.createddate > now()
:?