2011-05-03 19 views
21

bir şey seçin Postgresql, "dt" adlı bir datetime alanı var. BenPostgresql - date = "01/01/11"

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11' 

bunun en doğrusu sözdizimi nedir böyle bir şey yapmak istiyorum?

Teşekkürler!

cevap

40

Sana the format of your date literal senin dt bir date için döküm ve düzeltmek istiyorum düşünüyorum:

SELECT * 
FROM table 
WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD 

Veya standard version:

SELECT * 
FROM table 
WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD 

extract function "tarih" anlamıyor ve bir döner numara.

+6

Bir ek: Zaman damgası alanı dizine eklendiyse, dt :: date veya CAST (dt AS tarihi) kullanılarak dizin kullanılmaz. Alternatif bir yöntem, dt :: date üzerinde bir fonksiyonel indeks oluşturmak veya bu şekilde yazmak ($ ​​1 parametresini bir tarih dizesi olarak kullanmak): WHERE dt> = $ 1 AND dt <$ 1 + interval '1 day'. –

1

PostgreSQL ile bir dizi tarih/saat fonksiyonu vardır, bkz. here. Örnekte

şunu kullanabilirsiniz:

CREATE INDEX date_trunc_dt_idx ON myTable (date_trunc('day', dt)); 

Bir avantajı:

SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD'; 

düzenli Bu sorguyu çalıştırıyorsanız, buna da date_trunc işlevini kullanarak bir dizin oluşturmak mümkündür bunun için gereken zaman dilimi ile biraz daha esneklik vardır, örneğin: