我无法摆脱' IF'
附近的"错误的语法使用开始和结束对CASE和IF Else语句进行了多次尝试。
第二行的第一个IF有错误:' IF'
附近的语法不正确我缺少什么?!!!
谢谢,约翰
选择长查询的摘录。
CASE when (pt.PRE_POST_MODE = NULL) then
/*Error ->*/IF (CONVERT(DATETIME, CONVERT(DATE, extra.END_DATE)) != null)
begin
if (IsDate(rc.START_DATE)= 1)
begin
select (CONVERT(DATETIME, CONVERT(DATE, extra.START_DATE)))
end
else if (CONVERT(date, rc.START_DATE) < CONVERT(date, sh.SAIL_DATE_FROM))
begin
select 'PRE'
end
end
if (IsDate(extra.END_DATE) = 1)
begin
if (IsDate(rc.START_DATE) = 1)
begin
select CONVERT(DATETIME, CONVERT(DATE,extra.START_DATE))
--WHEN CAST(CONVERT(DATETIME, CONVERT(DATE, rc.START_DATE)) AS DATE) >= CAST(sh.SAIL_DATE_TO AS DATE) THEN 'POST'
if CONVERT(DATETIME, CONVERT(DATE, rc.START_DATE)) >= sh.SAIL_DATE_TO
begin
select 'POST'
end
end
end
ELSE
SELECT pt.PRE_POST_MODE
as PRE_POST_MODE,
第二行的第一个IF有错误:&#39; IF&#39;
附近的语法不正确 谢谢你!S://i.stack.imgur.com/7maMA.png
答案 0 :(得分:0)
正如其他人已经提到的那样,IF是一个控制流语句,不能在select语句中使用。
但是,您可以使用IIF功能来实现此结果。您将能够使用IIF编写相同的表达式,但结果将太复杂,我会寻找其他解决方案。
此链接解释了IIF表达:
答案 1 :(得分:0)
如果不能在上面发布的语句中使用,您可以使用嵌套案例。
http://www.sqlservercurry.com/2016/05/nested-case-statement-in-sql-server_15.html?m=1
答案 2 :(得分:0)
用例改为
CASE when (pt.PRE_POST_MODE = NULL) then
case when (CONVERT(DATETIME, CONVERT(DATE, extra.END_DATE)) != null)
then (case when (IsDate(rc.START_DATE)= 1) then (CONVERT(DATETIME, CONVERT(DATE, extra.START_DATE)))
when (CONVERT(date, rc.START_DATE) < CONVERT(date, sh.SAIL_DATE_FROM)) then 'PRE' end)
when (IsDate(extra.END_DATE) = 1) then (case when (IsDate(rc.START_DATE) = 1) then CONVERT(DATETIME, CONVERT(DATE,extra.START_DATE))
case when CONVERT(DATETIME, CONVERT(DATE, rc.START_DATE)) >= sh.SAIL_DATE_TO then 'POST' else '' end) end)
ELSE
pt.PRE_POST_MODE end)
end
as PRE_POST_MODE