【发布时间】:2023-04-11 09:35:01
【问题描述】:
我无法摆脱“'IF' 附近的语法不正确
使用 begin 和 end 对 CASE 和 IF Else 语句进行了多次尝试。
第二行的第一个 IF 有错误:'IF' 附近的语法不正确
我错过了什么?!!!
谢谢,约翰
选择长查询的sn-p。
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 有错误:'IF' 附近的语法不正确
谢谢!
s://i.stack.imgur.com/7maMA.png
【问题讨论】:
-
这不是 SQL Server 语法。您在查询中间没有
IF语句。您不使用CASE进行控制流。 -
正如 gordon 所说,
CASE用于条件表达式,而不是控制流。 -
而
IF用于控制流,而不是用于选择语句中的表达式。 -
正如其他人指出的那样,您的代码中的 CASE 和 IF 语句存在混淆。我建议您改为解释您的目标是什么以及您将要实现的目标。这样你可能会得到更好的帮助。
-
另外 pt.PRE_POST_MODE = NULL 也不起作用(与 != null 相同),您应该使用 IS NULL 和 IS NOT NULL
标签: sql sql-server syntax-error