Postgres存储过程中用CASE返回星期名报语法错误如何解决
错误原因
你的代码存在3处核心问题:
- PL/pgSQL语法中,CASE表达式的返回值需要显式赋值给变量,不能直接用
AS 变量名的写法,赋值要使用:=操作符 - 缺少函数返回必需的
RETURN语句,同时CASE语句结束后缺少必要的分号 - 入参
weekno的类型设计不合理:取值是0-6的整数,用double precision很容易因为浮点数精度问题导致匹配失败,建议替换为int类型
修正后的完整代码
CREATE OR REPLACE FUNCTION ReturnWeekName(weekno int) RETURNS varchar AS $$ DECLARE weekname varchar; BEGIN weekname := CASE WHEN weekno = 0 THEN 'Sunday' WHEN weekno = 1 THEN 'Monday' WHEN weekno = 2 THEN 'Tuesday' WHEN weekno = 3 THEN 'Wednesday' WHEN weekno = 4 THEN 'Thursday' WHEN weekno = 5 THEN 'Friday' WHEN weekno = 6 THEN 'Saturday' END; RETURN weekname; END; $$ LANGUAGE plpgsql;
测试调用
-- 返回 Sunday SELECT ReturnWeekName(0); -- 返回 Saturday SELECT ReturnWeekName(6);
内容的提问来源于stack exchange,提问作者xmiha
相关产品推荐
相关产品推荐

