当我尝试执行此代码以设置变量时,我收到一条错误消息:
DECLARE
@timenow DATETIME = GETDATE()
,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())
IF DATENAME(DW,GETDATE()) = 'MONDAY'
DECLARE @Fecha_222 DATETIME SET @Fecha_222 = @timenow-3
ELSE
SET @Fecha_222 = @timenow-1
我想设置变量@ Fecha_222来修复之前的日期。如果它是星期一然后给我星期五的日期,如果不是..前一天给我。 我收到错误消息说关键字else附近的sintax不正确。 代码中出了什么问题?我真的很感谢你的帮助!! 非常感谢提前!
马科斯
答案 0 :(得分:1)
你有三个问题:
1)如果在另一半中引用,则声明为半数
2)在IF之后你有多行SQL而不使用BEGIN和END
3)这更具外观,但可能导致逻辑问题。您声明@timenow并将其设置为GETDATE(),但在IF中,您没有引用该变量。如果你想模拟不同日期的代码,你可以有多个地方来修复它。
DECLARE
@timenow DATETIME = GETDATE()
,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())
,@Fecha_222 DATETIME
IF DATENAME(DW,@timenow) = 'MONDAY'
SET @Fecha_222 = @timenow-3
ELSE
SET @Fecha_222 = @timenow-1
答案 1 :(得分:0)
将声明移到eIF块之外:
DECLARE
@timenow DATETIME = GETDATE()
,@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE())
DECLARE @Fecha_222 DATETIME
IF DATENAME(DW,GETDATE()) = 'MONDAY'
SET @Fecha_222 = @timenow-3
ELSE
SET @Fecha_222 = @timenow-1
答案 2 :(得分:0)
因为当它进入else条件时它无法找到@ Fecha_222,因为你已经在if条件中声明了它没有被执行。所以你必须在if-else之外声明@ Fecha_222。
DECLARE
@timenow DATETIME = GETDATE(),
@WEEKDAY nvarchar(10) = DATENAME(DW,GETDATE(),
@Fecha_222 DATETIME
IF DATENAME(DW,GETDATE()) = 'MONDAY'
SET @Fecha_222 = @timenow-3
ELSE
SET @Fecha_222 = @timenow-1