将sqlite转换为postgres查询

将sqlite转换为postgres查询,sql,postgresql,sqlite,Sql,Postgresql,Sqlite,有人能帮我把这个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 (

有人能帮我把这个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
选择count(*),count(*),date(date,“-”|| strftime(“%w”,date)| |“days”)作为日期
从作为m的电子邮件到作为我的联系人
其中datetime(date)>datetime('2010-08-25'))
和datetime(date)
更新后,我找到了答案:

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
选择count(*),(m.date::date-提取(dow from.date)::int)作为dat
以m的身份发送电子邮件,以m.fr=me.id的身份加入联系人
其中m.date>“2010-08-25”
和m.日期<'2011-08-25'
还有像“%gmail.com%”这样的me.email
按dat分组
dat订购

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
选择count(*),count(*),m.date::date-提取(dow from m m.date)::int as date
以m的身份发送电子邮件,以m.fr=me.id的身份加入联系人
其中m.date>“2010-08-25”
和m.日期<'2011-08-25'
还有像“%gmail.com%”这样的me.email
按m日期分组
m.date asc订购
PostgreSQL可以单独将时间戳与ISO8601日期字符串进行比较,因此不需要进行任何转换或重新格式化来进行比较


两个
count(*)
在我看来仍然有点滑稽,但我不知道查询使用的上下文,因此重复项可能有意义。

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
选择count(*),count(*),m.date::date-提取(dow from m m.date)::int as date
以m的身份发送电子邮件,以m.fr=me.id的身份加入联系人
其中m.date>“2010-08-25”
和m.日期<'2011-08-25'
还有像“%gmail.com%”这样的me.email
按m日期分组
m.date asc订购
PostgreSQL可以单独将时间戳与ISO8601日期字符串进行比较,因此不需要进行任何转换或重新格式化来进行比较


两个
count(*)
在我看来仍然有点滑稽,但我不知道查询使用的上下文,因此重复项可能有意义。

您在potsgres中使用的日期列是什么类型的?真的有两个
count(*)
还是一个打字错误?似乎有两个
count(*)
,不知道为什么。日期类型是“带时区的时间戳”。您在potsgres中使用的日期列类型是什么?是否真的有两个
count(*)
,或者这是一个输入错误?似乎有两个
count(*)
,不确定原因。日期类型是“带时区的时间戳”,因为某些原因,这并不完全是它。当您说“按日期分组”时,实际上并没有将其分组并将计数相加。@cfarm54:您有任何示例数据和模式吗?我们有
date
列、
date
函数和
date
别名;PostgreSQL和SQLite可能会在不同的情况下做出不同的选择。请确保
电子邮件的架构为:
(id integer主键自动递增,fr int引用联系人(id),subject text,datetime,mid text unique,reply text引用msgs(mid),multipart bool)
联系人的模式为:
(id整数主键自动递增,名称文本,电子邮件文本不为空)。我也对“日期”这个词感到困惑;在方法调用和变量之间,非常混乱:P.I将表前缀添加到各种
date
列中,看看这是否有用。PostgreSQL的
时间戳
比SQLite的
日期时间
具有更高的分辨率,这可能会导致一些分组奇怪;尝试
按m.date::date分组,看看这有什么作用。使用
date
作为列名几乎是犯罪行为,你可能想和负责选择原始列名的人说几句话。idk如果这有帮助,但我认为查询要做的是:1。将每天的日期修改为周末(星期日),然后按日期对每个计数进行分组。这样的话,你基本上是在计算7天内发送的电子邮件总数。由于某些原因,这并不完全正确。当您说“按日期分组”时,实际上并没有将其分组并将计数相加。@cfarm54:您有任何示例数据和模式吗?我们有
date
列、
date
函数和
date
别名;PostgreSQL和SQLite可能会在不同的情况下做出不同的选择。请确保
电子邮件的架构为:
(id integer主键自动递增,fr int引用联系人(id),subject text,datetime,mid text unique,reply text引用msgs(mid),multipart bool)
联系人的模式为:
(id整数主键自动递增,名称文本,电子邮件文本不为空)。我也对“日期”这个词感到困惑;在方法调用和变量之间,非常混乱:P.I将表前缀添加到各种
date
列中,看看这是否有用。PostgreSQL的
时间戳
比SQLite的
日期时间
具有更高的分辨率,这可能会导致一些分组奇怪;尝试
按m.date::date分组,看看这有什么作用。使用
date
作为列名几乎是犯罪行为,你可能想和负责选择原始列名的人说几句话。idk如果这有帮助,但我认为查询要做的是:1。修改每天的日期,直到结束