конвертировать sqlite в запрос postgres - PullRequest
1 голос
/ 25 августа 2011

Может ли кто-нибудь помочь мне преобразовать этот sqlite-запрос в запрос postgres?

SELECT count(*), count(*), date(date, '-'||strftime('%w',date)||' days') as date
FROM emails as m, contacts as me
WHERE datetime(date) > datetime('2010-08-25')
  and datetime(date) < datetime('2011-08-25')
  and (me.id = m.fr)
  and me.email like '%gmail.com%'
GROUP BY date
ORDER BY date asc

обновление, я нашел ответ:

select count(*), (m.date::date - extract(dow from m.date)::int) as dat
from emails as m join contacts as me on m.fr = me.id
where m.date > '2010-08-25'
  and m.date < '2011-08-25'
  and me.email like '%gmail.com%'
group by dat
order by dat

1 Ответ

1 голос
/ 25 августа 2011

О strftime бизнесе позаботились о в других местах , поэтому нам нужно только разобраться с datetime(...) здесь и компенсировать date как отметку времени. И я переключусь на явное условие соединения (а не на неявное условие в предложении WHERE), пока я здесь.

select count(*), count(*), m.date::date - extract(dow from m.date)::int as date
from emails as m join contacts as me on m.fr = me.id
where m.date > '2010-08-25'
  and m.date < '2011-08-25'
  and me.email like '%gmail.com%'
group by m.date
order by m.date asc

PostgreSQL может сравнивать временные метки со строками даты ISO8601 самостоятельно, поэтому вам не нужно преобразовывать или преобразовывать данные для сравнения.

Эти два count(*) все еще выглядят немного забавно для меня, но я не знаю контекст, в котором используется запрос, поэтому дубликаты могут иметь смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...