如果以防查询,Postgres嵌套

时间:2010-11-16 19:41:46

标签: sql postgresql if-statement case

你能告诉我为什么以下不能在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;

错误信息见上文。

2 个答案:

答案 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。