首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取按月筛选记录时出错SQL

获取按月筛选记录时出错SQL
EN

Stack Overflow用户
提问于 2021-06-01 10:41:49
回答 3查看 39关注 0票数 0

我有以下代码,我试图找到五月的记录,并试图按网站分组。但是得到这个错误。知道为什么它说没有匹配的函数吗?

代码语言:javascript
复制
SELECT
ad.site, SUM(e.clicks) AS totalclicks
FROM Extable e 
INNER JOIN Ads ad ON e.ad_id = ad.ad_id
WHERE month(ad.Create_Time) = 5
Group by ad.site;

但是我得到了这个错误

代码语言:javascript
复制
ERROR: function month(date) does not exist
LINE 4: WHERE month(ad.Create_Time) = 5
^

HINT: No function matches the given name and argument types. You might need to add explicit type casts.

SQL state: 42883
Character: 107
EN

回答 3

Stack Overflow用户

发布于 2021-06-01 10:46:35

Here是PostgreSQL的日期/时间函数的文档。似乎你必须使用EXTRACT()或DATE_PART()

代码语言:javascript
复制
date_part('hour', timestamp '2001-02-16 20:38:40')

extract(hour from timestamp '2001-02-16 20:38:40')
票数 2
EN

Stack Overflow用户

发布于 2021-06-01 13:32:54

没有内置的命名month

您应该像这样编写您的查询:

代码语言:javascript
复制
SELECT
ad.site, SUM(e.clicks) AS totalclicks
FROM Extable e 
INNER JOIN Ads ad ON e.ad_id = ad.ad_id
WHERE 
extract (month from ad.Create_Time) = 5 --your month
and 
extract (month from ad.Create_Time) = 2021 --year
Group by ad.site;

除了月份之外,您还可以检查年份(根据您的要求)

票数 1
EN

Stack Overflow用户

发布于 2021-06-01 16:26:46

使用EXTRACT()效果很好,很多数据库都支持它,包括MySQL

但是您也可以在PostgreSQL中创建一个MONTH()-function来模仿PostgreSQL中的这个MySQL函数。您需要3个函数,每个函数对应一种数据类型(日期、时间戳和带有时区的时间戳):

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION month(IN i_date DATE) 
RETURNS INT
LANGUAGE sql
IMMUTABLE
AS
$$
    SELECT EXTRACT(MONTH FROM $1);
$$;

CREATE OR REPLACE FUNCTION month(IN i_timestamp TIMESTAMP) 
RETURNS INT
LANGUAGE sql
IMMUTABLE
AS
$$
    SELECT EXTRACT(MONTH FROM $1);
$$;

CREATE OR REPLACE FUNCTION month(IN i_timestamptz TIMESTAMP WITH TIME ZONE) 
RETURNS INT
LANGUAGE sql
IMMUTABLE
AS
$$
    SELECT EXTRACT(MONTH FROM $1);
$$;

-- Tests:
SELECT month(CURRENT_DATE); -- date

SELECT month(localtimestamp); -- timestamp

SELECT month(CURRENT_TIMESTAMP); -- timestamp with time zone
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67782083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档