你能告诉我为什么以下不能在postgres sql中工作吗?:
See updated code below
更新:
我希望查询返回“0.30”作为float。 这个构造仅用于测试目的,我有一些复杂的查询依赖于这个条件结构... BUt我不知道如何解决它..
结果是:
ERROR: syntax error at or near "1"
LINE 4: if 1=1 then
更新:
这个结构出现在一个函数中......所以我想做以下几点:
CREATE FUNCTION f_test(myvalue integer) RETURNS float AS $$
BEGIN
select (
case (select '1')
when '1' then
if 1=1 then
0.30::float
else
0.50::float
end
else
1.00::float
end
);
END;
$$ LANGUAGE plpgsql;
select f_test(1) as test;
错误信息见上文。
答案 0 :(得分:9)
Postgres中的普通SQL查询没有IF expr THEN result ELSE result END
语法。由于MySQL中没有IF()
函数,因此必须使用CASE
:
select (
case (select '1')
when '1' then
case when 1=1 then 0.30::float else 0.50::float end
else
1.00::float
end
);
答案 1 :(得分:1)
我不知道你用这个功能想要实现什么,但这是一个有效的版本。
CREATE FUNCTION f_test(myvalue integer) RETURNS float AS $$
BEGIN
IF myvalue = 1 THEN
IF 1=1 THEN
RETURN 0.30::FLOAT;
ELSE
RETURN 0.50::FLOAT;
END IF;
ELSE
RETURN 1.0::FLOAT;
END IF;
END;
如果输入值为1,则函数返回0.3,否则返回1. 编辑:注意函数永远不会返回0.5。