代码之家  ›  专栏  ›  技术社区  ›  BvuRVKyUVlViVIc7

Postgres嵌套if-in-case查询

  •  7
  • BvuRVKyUVlViVIc7  · 技术社区  · 15 年前

    你能告诉我为什么下面的语句在PostgresSQL中不起作用吗?:

    See updated code below
    

    更新:

    我希望查询返回“0.30”作为float。 这个构造只是为了测试,我有一些复杂的查询依赖于这个条件结构。。。但我不知道该怎么解决。。

    结果是:

    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 回复  |  直到 15 年前
        1
  •  9
  •   AndreKR    15 年前

    没有 IF expr THEN result ELSE result END Postgres中普通SQL查询的语法。因为没有 IF() 在MySQL中,您必须使用 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
    );
    
        2
  •  1
  •   jmz    15 年前

    我不知道你想用这个函数实现什么,但这里有一个工作版本。

    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。