SQL中的If语句如何执行

SQL中的If语句如何执行,sql,if-statement,Sql,If Statement,我有一个if语句(如下)在Tableau中运行。我需要将其转换为SQl—我尝试了许多不同的case语句,但它们都会出错 谁能告诉我该怎么做 IF LEN(REPLACE([postcode]," ","")) = 7 THEN LEFT(REPLACE([postcode]," ",""),4)+" "+RIGHT(REPLACE([postcode]," ",""),3) ELSEIF LEN(REPLACE([postcode]," ","")) = 6 THEN LEFT(REPL

我有一个if语句(如下)在Tableau中运行。我需要将其转换为SQl—我尝试了许多不同的case语句,但它们都会出错

谁能告诉我该怎么做

    IF LEN(REPLACE([postcode]," ","")) = 7 THEN LEFT(REPLACE([postcode]," ",""),4)+" "+RIGHT(REPLACE([postcode]," ",""),3)
ELSEIF LEN(REPLACE([postcode]," ","")) = 6 THEN LEFT(REPLACE([postcode]," ",""),3)+" "+RIGHT(REPLACE([postcode]," ",""),3)
ELSEIF LEN(REPLACE([postcode]," ","")) = 5 THEN LEFT(REPLACE([postcode]," ",""),2)+" "+RIGHT(REPLACE([postcode]," ",""),3)
END
尝试使用以下方法:

SELECT
  CASE
    WHEN LEN(REPLACE([postcode],' ','')) = 7
    THEN LEFT(REPLACE([postcode],' ',''),4)+' '+RIGHT(REPLACE([postcode],' ',''),3)
    WHEN LEN(REPLACE([postcode],' ','')) = 6
    THEN LEFT(REPLACE([postcode],' ',''),3)+' '+RIGHT(REPLACE([postcode],' ',''),3)
    WHEN LEN(REPLACE([postcode],' ','')) = 5
    THEN LEFT(REPLACE([postcode],' ',''),2)+' '+RIGHT(REPLACE([postcode],' ',''),3)
    ELSE 'ERROR'
  END
FROM YOUR_TABLE

您可以将语句中的
IF
替换为
CASE WHEN
以及所有的
ELSEIF
by
WHEN

但您也可以将其简化为:

CASE 
WHEN LEN(REPLACE([POSTCODE]," ","")) IN (5,6,7) THEN REPLACE ([POSTCODE]," ","")
ELSE NULL
END

因为f.e.“ABC”+“DEF”=“ABCDEF”=“ABC DEF”没有空格。

正如OP在一些查询后所说的,他在Hadoop上使用的是Hive,而不是普通的SQL


所以-也许-这可以让您开始:

请向我们展示您迄今为止的尝试。这可能会有帮助…你尝试过的大量案例陈述是什么?
案例LEN(替换([邮政编码]),“”,“”),当7然后向左(替换([邮政编码],“”,“”),4)+右(替换([邮政编码],“”),3)当6然后向左(替换([邮政编码],“”),3)+右(替换([邮政编码],“”),3)当5然后向左(替换([邮政编码],“”,“”),2)+“”+右(替换([postcode],“”,“”),3)结束
?“[postcode]”是什么?还有,你读过关于SQL的书吗?如果使用
+
进行连接或执行任何您想要执行的操作,您将不会走得很远。也许,你应该澄清一下你的问题。ANSI SQL没有LEN或ELSEIF等。。。标记您正在使用的dbms。这太棒了。遗憾的是,我遇到了这样的错误:编译语句时出错:失败:ParseException第4:17行无法识别函数规范中“[''邮政编码“”]”附近的输入---您能给出建议吗?嗯,尝试使用双引号而不是单引号吗?我原本以为这是针对T-SQL的,它对文本使用单引号。