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_TIMESTAMPjest 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_TIMESTAMPimplementowany 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 nowpowią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 STABLEjak 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():?