[英]Transform query results values in PostgreSQL
我有一组数字标识符(例如100
, 101
, 102
等),其映射到一个用户可以采取动作。 我希望能够将这些值转换为人类可读的字符串,这样我就可以运行报告,而不必在其中包含图例键。
我初步尝试创建一个函数
CREATE FUNCTION action_to_str (integer) RETURNS text as $$ BEGIN IF $1 = 100 THEN RETURN "skip"; ELSIF $1 = 101 THEN RETURN "save"; ELSIF $1 = 102 THEN RETURN "buy"; ELSIF $1 = 103 THEN RETURN "map"; ELSIF $1 = 104 THEN RETURN "dismiss"; ELSIF $1 = 105 THEN RETURN "share"; ELSIF $1 = 106 THEN RETURN "dislike"; ELSE RETURN "unknown"; END IF; END; $$ LANGUAGE plpgsql;
但是然后我得到这样的错误:
ERROR: column "dismiss" does not exist LINE 1: SELECT "dismiss" ^ QUERY: SELECT "dismiss" CONTEXT: PL/pgSQL function action_to_str(integer) line 12 at RETURN
我了解发生了什么(它认为函数的结果是一列而不是一个值),但是我不确定如何解决此问题。
主要问题是您要对返回的值加双引号( "
)。请改用单引号( '
)。双引号用于标识符(不建议)。单引号用于值。
最佳实践是创建表action
create table action (
action_id int,
action_description text
);
并将其加入查询
select coalesce(a.action_description, 'unknown')
from
some_table st
left join
action a using(action_id);
习惯的口头禅是:认为关系不是程序性的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.