PostgreSQL:如何从字符串结果中获取数值结果,而不是数字

xoefb8l8  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(138)

我想在名为Grafana的可视化工具中设置警报规则。问题是,要设置警报规则,查询结果必须是数字,因为他们的工具不支持其他类型(github issue)。
我想检查指定AlertID的名为colors_of_alerts的表中的最新示例Color是否为red_color。如果是的话,我想发射警报,否则什么都不做。除red_color外的其他可能值为:green_coloryellow_color
在理想情况下,下面的查询就足够了:

select "Color" from (select "Color" from colors_of_alerts where "AlertID"=72 order by "TimeUTC" desc limit 1) as res where res."Color"='red_circle'

字符串
问题是,我需要查询的返回值是数字类型,但在PostgreSQL中将字符串转换为整数的唯一方法需要字符串保存数字('1''1.901'等)。
我想找到的东西,将工作如下:if“Color”='red_circle' return 1,otherwise return 0,但是PostgreSQL return只在函数中工作,研究函数的输入输出对于我的简单查询来说是另一个蠕虫。所以我尝试使用if-else语句:

DO $$
begin 
if exists (select "Color" from (select "Color" from colors_of_alerts where "AlertID"=72 order by "TimeUTC" desc limit 1) as res where res."Color"='red_circle') then 
update res set "Color"='1';
else 
update res set "Color"='0';
END IF;
end $$;


使用0或1 varchar设置结果单元格,然后通过CAST::integer将该varchar转换为number,但它会导致SQL Error [42P01]: ERROR: relation "res" does not exist问题,这可能是由于表别名命名处理不正确而发生的。请帮助我用简单的命令创建我的查询,因为我认为我的查询是不必要的复杂。

h4cxqtbf

h4cxqtbf1#

感谢@MikeOrganek的提示,我已经找到了正确的命令来做需要做的事情,希望这对将来的人有所帮助:

SELECT
  CASE WHEN res."Color" = 'red_circle' THEN 1 ELSE 0 END result
FROM
  (SELECT "Color"
   FROM colors_of_alerts
   WHERE "AlertID" = 72
   ORDER BY "TimeUTC" DESC
   LIMIT 1) AS res;

字符串

相关问题