簡體   English   中英

如果以防查詢,Postgres嵌套

[英]Postgres nested if in case query

你能告訴我為什么以下不能在postgres sql中工作嗎?:

See updated code below

更新:

我希望查詢返回“0.30”作為浮點數。 這個構造僅用於測試目的,我有一些復雜的查詢依賴於這個條件結構... 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;

錯誤信息見上文。

對於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
);

我不知道你用這個功能想要實現什么,但這是一個有效的版本。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM