将datepart的输出与整数进行比较时出错

时间:2017-06-15 20:12:14

标签: tsql sql-server-2008-r2

我有一个查询,我一直在修改以用作报告的来源。 由于一些奇怪的原因,当我尝试将datepart(dw,GetDate())的输出与一个整数(星期一为2)进行比较时,它给我一个错误,告诉我错误的语法。然后我开始研究为什么我不能在iif语句中比较两个整数...我发现绝对没有答案。 这里是完整的代码(我来回了解如何执行此操作,这是迭代尝试)

    DECLARE @dp integer,@d integer
    set @dp =DATEpart(dw,GETDATE())
    set @d = 2
    SELECT TOP 100 PERCENT CUST_ORDER_LINE.PRODUCT_CODE
        ,CUSTOMER_ORDER.ID
        ,CUSTOMER_ORDER.CUSTOMER_ID
        ,CUST_ORDER_LINE.PART_ID
        ,CUST_ORDER_LINE.MISC_REFERENCE
        ,CUST_ORDER_LINE.COMMODITY_CODE
        ,CUSTOMER_ORDER.SALESREP_ID
        ,CUSTOMER_ORDER.TERRITORY
        ,CUST_ORDER_LINE.ORDER_QTY * CUST_ORDER_LINE.UNIT_PRICE AS Amount
        ,CUSTOMER_ORDER.ORDER_DATE
    FROM CUST_ORDER_LINE
    INNER JOIN CUSTOMER_ORDER ON CUST_ORDER_LINE.CUST_ORDER_ID = CUSTOMER_ORDER.ID
    WHERE (
            iif(@dp = @d,CUSTOMER_ORDER.ORDER_DATE BETWEEN ( dateadd(day, datediff(day, 0, getdate()), 0) - 3)  AND ( dateadd(day, datediff(day, 0, getdate()),0))),
            CUSTOMER_ORDER.ORDER_DATE BETWEEN ( dateadd(day, datediff(day, 0, getdate()), 0) - 1))  AND ( dateadd(day, datediff(day, 0, getdate()), + 1))))
            )
    ORDER BY CUSTOMER_ORDER.ORDER_DATE DESC

此查询的目的是从昨天开始提取数据,如果是星期一则提供星期五。

编辑:错误代码消息170,级别15,状态1,第19行 第19行:' ='附近的语法不正确。

1 个答案:

答案 0 :(得分:3)

IIF是在2012年。您可以尝试使用CASE

DECLARE @dp integer,@d integer
    set @dp =DATEpart(dw,GETDATE())
    set @d = 2
    SELECT TOP 100 PERCENT CUST_ORDER_LINE.PRODUCT_CODE
        ,CUSTOMER_ORDER.ID
        ,CUSTOMER_ORDER.CUSTOMER_ID
        ,CUST_ORDER_LINE.PART_ID
        ,CUST_ORDER_LINE.MISC_REFERENCE
        ,CUST_ORDER_LINE.COMMODITY_CODE
        ,CUSTOMER_ORDER.SALESREP_ID
        ,CUSTOMER_ORDER.TERRITORY
        ,CUST_ORDER_LINE.ORDER_QTY * CUST_ORDER_LINE.UNIT_PRICE AS Amount
        ,CUSTOMER_ORDER.ORDER_DATE
    FROM CUST_ORDER_LINE
    INNER JOIN CUSTOMER_ORDER ON CUST_ORDER_LINE.CUST_ORDER_ID = CUSTOMER_ORDER.ID
    WHERE 
      CUSTOMER_ORDER.ORDER_DATE BETWEEN CASE
                                          WHEN @dp = @d THEN ( dateadd(day, datediff(day, 0, getdate()), 0) - 3)
                                          ELSE ( dateadd(day, datediff(day, 0, getdate()), 0) - 1)
                                        END
                                AND CASE
                                      WHEN @dp = @d THEN ( dateadd(day, datediff(day, 0, getdate()),0))
                                      ELSE ( dateadd(day, datediff(day, 0, getdate()), + 1))
                                    END

    ORDER BY CUSTOMER_ORDER.ORDER_DATE DESC