Bir zaman damgası tarihinden 1 gün çıkarma


98

Postgresql için Datagrip kullanıyorum. Zaman damgası biçiminde bir tarih alanı olan bir tablom var (ex: 2016-11-01 00:00:00). Ben yapabilmeyi isterim:

  1. 1 günü çıkarmak için matematiksel bir operatör uygulayın
  2. bugün 130 günlük bir zaman aralığına göre filtreleyin
  3. damganın hh / mm / ss kısmı olmadan göster (2016-10-31)

Mevcut başlangıç ​​sorgusu:

select org_id, count(accounts) as count, ((date_at) - 1) as dateat 
from sourcetable 
where  date_at <= now() - 130
group by org_id, dateat

((date_at)-1)Doğrultusunda 1 sonuç üzerinde hüküm:

[42883] HATA: işleç yok: saat dilimi olmayan zaman damgası - tamsayı İpucu: Verilen ad ve bağımsız değişken türleriyle eşleşen operatör yok. Açık tip atamaları eklemeniz gerekebilir. Pozisyon: 69

now()Fıkra benzer bir mesaj getirir:

[42883] HATA: operatör mevcut değil: saat dilimli zaman damgası - tamsayı İpucu: Verilen ad ve bağımsız değişken türleriyle eşleşen operatör yok. Açık tip atamaları eklemeniz gerekebilir. Durum: ...

Yayın yazmak için çevrimiçi kılavuzlar tek başına yararsızdır. Girdi takdir edilmektedir.

Yanıtlar:


226

INTERVALTürü ona göre kullanın . Örneğin:

--yesterday
SELECT NOW() - INTERVAL '1 DAY';

--Unrelated to the question, but PostgreSQL also supports some shortcuts:
SELECT 'yesterday'::TIMESTAMP, 'tomorrow'::TIMESTAMP, 'allballs'::TIME;

Ardından sorgunuzda aşağıdakileri yapabilirsiniz:

SELECT 
    org_id,
    count(accounts) AS COUNT,
    ((date_at) - INTERVAL '1 DAY') AS dateat
FROM 
    sourcetable
WHERE 
    date_at <= now() - INTERVAL '130 DAYS'
GROUP BY 
    org_id,
    dateat;


İPUÇLARI

1. ipucu

Birden çok işlenen ekleyebilirsiniz. Örneğin: bu ayın son günü nasıl alınır?

SELECT date_trunc('MONTH', CURRENT_DATE) + INTERVAL '1 MONTH - 1 DAY';

2. ipucu

Ayrıca make_intervalişlevi kullanarak bir aralık oluşturabilirsiniz, çalışma zamanında onu oluşturmanız gerektiğinde yararlıdır (değişmez değerleri kullanmadan):

SELECT make_interval(days => 10 + 2);
SELECT make_interval(days => 1, hours => 2);
SELECT make_interval(0, 1, 0, 5, 0, 0, 0.0);


Daha fazla bilgi:

Tarih / Saat İşlevleri ve Operatörleri

datatype-datetime (Özel değerler) .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.