我正在尝试使用表中的两个参数 year 和 code 执行一个函数,以返回给定代码和年份的计数。表是这样的:
CREATE TABLE orders (
id INT NOT NULL,
code INT NOT NULL,
service_id INT NOT NULL,
status CHARACTER VARYING(50),
creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status_date TIMESTAMP,
created_user INT
);
我能够使用下面的函数返回计数,但是当我为年份和没有计数的代码提供值时,它返回 NULL 但应该返回零,我该怎么做?:
CREATE OR REPLACE FUNCTION yearly_orders
(year INT, order_cat orders.code%type) RETURNS INT AS $$
DECLARE
total INT DEFAULT 0;
BEGIN
SELECT COUNT(orders.code) INTO total
FROM orders
WHERE status = 'Requested' AND EXTRACT(YEAR FROM creation) = year::INT AND orders.code = order_cat
GROUP BY year, orders.code;
RETURN total;
END;
$$LANGUAGE plpgsql;
数据类似于:
INSERT INTO orders
(id, code, service_id, status, creation, status_date, created_user)
VALUES
(100,2394,558151,'Requested','2019-06-16 11:12','2019-06-18 14:08',1);
这会起作用:
从
integer
to的转换timestamp
实际上取决于您传递的确切内容以及它应该意味着什么。您可能想要to_timestamp(_year::text, 'YY')
...考虑一下 Akina 评论中的列表。
开始阅读有关SQL 函数的手册。
之后看看PL/pgSQL 函数。
概述:
看到问题已重新打开,我也会发布我的解决方案。
“订单”表
记录
测试你的陈述
退货
功能
执行功能
退货
db<>小提琴
可以在此处找到尝试此操作的 db<>fiddle 。