Різниці немає. Три цитати з посібника:
1)
Ці стандартні функції SQL усі повертають значення на основі часу початку поточної транзакції:
...
...
CURRENT_TIMESTAMP
2)
transaction_timestamp()
еквівалентний CURRENT_TIMESTAMP
, але призначений для чіткого відображення того, що він повертає.
3)
now()
це традиційний еквівалент PostgreSQL transaction_timestamp()
.
Сміливий акцент мій. CURRENT_TIMESTAMP
, transaction_timestamp()
і now()
зробіть точно так само. CURRENT_TIMESTAMP
є синтаксичною диваком для функції, що не має кінцевих парних дужок. Це відповідно до стандарту SQL.
Якщо ви не оголошуєте псевдонім стовпця для виклику функції в операторі SQL, псевдонім за замовчуванням має назву функції. Внутрішньо, стандарт-SQL CURRENT_TIMESTAMP
реалізований за допомогою now()
. До Postgres 9.6, що відображається в отриманій назві стовпця , яка була "зараз", але змінена на "current_timestamp" у Postgres 10.
transaction_timestamp()
робить те саме, але ця функція є належною функцією Postgres, тому псевдонім за замовчуванням завжди був "transak_timestamp".
Ви НЕ плутайте небудь з цих функцій зі спеціальною константою введення'now'
. Це лише одна з декількох примітних скорочень для конкретних значень дати / часу / часової позначки, цитуючи посібник:
... що буде перетворено на звичайні значення дати / часу при прочитанні. (Зокрема, now
і пов'язані рядки перетворюються на певне значення часу, як тільки вони прочитаються.) Усі ці значення потрібно укласти в окремі лапки, коли вони використовуються як константи в SQL-командах.
Це може додати плутанини, що (принаймні до Постгресу 12) будь-яка кількість провідних і кінцевих пробілів і дужок ( {[( )]}
) обрізана з цих спеціальних вхідних значень. Отож 'now()'::timestamptz
- або 'now()'
там, де не потрібен чіткий вигляд типів - також є дійсним і він має оцінюватися за тією ж міткою часу, що і функція now()
в більшості контекстів . Але це константи і, як правило, не те, що потрібно, наприклад, за замовчуванням стовпця.
db <> fiddle тут
Стара SQL скрипка
Помітними альтернативами є statement_timestamp()
і clock_timestamp()
. Посібник:
statement_timestamp()
повертає час початку поточного оператора (точніше, час отримання останнього повідомлення команди від клієнта). [...]
clock_timestamp()
повертає фактичний поточний час, і тому його значення змінюється навіть у межах однієї команди SQL.
Примітка: statement_timestamp()
це , STABLE
як зазначено вище (завжди повертає те ж значення в межах однієї і тієї ж команди SQL). Але clock_timestamp()
обов'язково є тільки VOLATILE
. Різниця може бути значною.
where items.createddate > now()
:?