Arada fark yok. Kılavuzdan üç alıntı:
1)
Bu SQL standardı, geçerli işlemin başlangıç zamanını temel alarak tüm değerleri döndürür:
...
...
CURRENT_TIMESTAMP
2)
transaction_timestamp()
eşittir CURRENT_TIMESTAMP
, ancak geri döndüğü şeyi açıkça yansıtması için adlandırılır.
3)
now()
geleneksel bir PostgreSQL'e eşittir transaction_timestamp()
.
Cesur vurgu benim. CURRENT_TIMESTAMP
, transaction_timestamp()
Ve now()
bunu tam olarak aynı. CURRENT_TIMESTAMP
Bir işlev için izleyen parantez çifti olmayan, sözdizimsel bir tuhaflıktır. Bu, SQL standardına göre.
Bir SQL deyiminde bir işlev çağrısı için bir sütun diğer adı bildirmezseniz, diğer ad varsayılan olarak işlev adına ayarlanır. Dahili olarak standart SQL CURRENT_TIMESTAMP
ile uygulanır now()
. "Şimdi" olan, ancak Postgres 10'da "current_timestamp" olarak değiştirilen , sonuçta elde edilen sütun adını gösteren Postgres 9.6'ya kadar .
transaction_timestamp()
aynısını yapar, ancak bu uygun bir Postgres işlevidir, bu nedenle varsayılan takma ad her zaman "işlem_timestamp" olmuştur.
Do not ya bunlardan şaşırtmak fonksiyonları özel ile giriş sabiti'now'
. Bu , kılavuzdan alıntı yaparak, belirli tarih / saat / zaman damgası değerleri için kullanılan noter kısıtlarından sadece biri :
... okunduğunda sıradan tarih / saat değerlerine dönüştürülecek. (Özellikle now
ve ilgili dizeler, okundukları anda belirli bir zaman değerine dönüştürülür.) Bu komutların hepsinin, SQL komutlarında sabit olarak kullanıldığında tek tırnak içine alınması gerekir.
Bu karışıklığa ek olarak (en az Postgres 12'ye kadar) herhangi bir sayıda ön ve arka boşluk ve braketin ( {[( )]}
) bu özel girdi değerlerinden kesilmiş olduğunu ekleyebilir . Öyleyse 'now()'::timestamptz
- veya sadece 'now()'
açık bir tip döküm gerektirmediğinde - de geçerlidir ve now()
çoğu bağlamdaki işlevle aynı zaman damgasını değerlendirir . Ancak bunlar sabittir ve genellikle örneğin sütun varsayılanı olarak istediğinizi değil .
db <> burada keman
Eski SQL keman
Önemli alternatifler statement_timestamp()
ve clock_timestamp()
. Kullanım kılavuzu:
statement_timestamp()
Geçerli ifadenin başlangıç zamanını döndürür (daha özel olarak istemciden en son komut mesajının alındığı zamanı). [...]
clock_timestamp()
gerçek geçerli zamanı döndürür ve bu nedenle değeri, tek bir SQL komutunda bile değişir.
Not: statement_timestamp()
olduğu STABLE
, yukarıda (her zaman aynı SQL komut içinde aynı değeri verir) olarak hazırlanmıştır. Ama clock_timestamp()
mutlaka sadece VOLATILE
. Fark önemli olabilir.
where items.createddate > now()
mı?