2016-12-13 15 views
-1

Ich habe eine Abfrage wie folgt aus:CASE WHEN mit AND-Anweisung in SQL

SELECT 
    CASE 
     WHEN (CONVERT(INT, (datepart(DD, A.CIDATE))) AND Year(getDate()) = 2016) <= 15 
      THEN CONVERT(INT,(datepart(MM,A.CIDATE))) 
     WHEN CONVERT(INT, (datepart(DD, A.CIDATE))) > 15 
      THEN CONVERT(INT, (datepart(MM, A.CIDATE))) + 1 
     ELSE 0 
    END AS MASA_PAJAK 
FROM 
    V_CLAIM_INTERNAL A 

Es funktioniert, aber wenn ich hinzufügen und Jahr (getDate()) = 2016 es wirft einen Fehler:

Msg 4145, Level 15, State 1, Line 1
An expression of non-boolean type specified in a context where a condition is expected, near 'AND'.

Ich versuche, auch konvertieren, aber immer noch den gleichen Fehler.

SELECT 
     CASE 
     WHEN ((CONVERT(INT, (datepart(DD, A.CIDATE))) AND (convert(int, Year(getDate()) = 2016))) <= 15 
      THEN CONVERT(INT, (datepart(MM, A.CIDATE))) 
     WHEN CONVERT(INT, (datepart(DD, A.CIDATE))) > 15 
      THEN CONVERT(INT, (datepart(MM, A.CIDATE))) + 1 
     ELSE 0 
     END AS MASA_PAJAK 
    FROM   
     V_CLAIM_INTERNAL A 

Was ist mein Fehler bei der Abfrage:?

Antwort

2

Dies ist wahrscheinlich das, was Sie zu tun beabsichtigen:

SELECT CASE WHEN DATEPART(DD, A.CIDATE) <= 15 AND YEAR(GETDATE()) = 2016 
      THEN DATEPART(MM, A.CIDATE) 
      WHEN DATEPART(DD, A.CIDATE) > 15 
      THEN DATEPART(MM, A.CIDATE) + 1 
      ELSE 0 
     END AS MASA_PAJAK 
FROM V_CLAIM_INTERNAL A 

Beachten Sie, dass nicht Notwendigkeit tun das Ergebnis des Aufrufs DATEPART zu konvertieren/cast, weil es schon eine ganze Zahl zurückgibt.

+1

es ist Arbeit .. vielen Dank .. Danke auch für deine Erklärung :) –

0
SELECT CASE 
      WHEN (CONVERT(INT,(datepart(DD,A.CIDATE)))<= 15 AND Year(getDate()) = 2016) THEN CONVERT(INT,(datepart(MM,A.CIDATE))) 
      WHEN CONVERT(INT,(datepart(DD,A.CIDATE))) > 15 THEN CONVERT(INT,(datepart(MM,A.CIDATE)))+1 
     ELSE 0 END AS MASA_PAJAK 
FROM V_CLAIM_INTERNAL A 
0

Diese Abfrage:

SELECT CASE WHEN datepart(DD,A.CIDATE)<= 15 AND 
       Year(getDate()) = 2016 
     THEN datepart(MM,A.CIDATE) 
     WHEN datepart(DD,A.CIDATE) > 15 
     THEN datepart(MM,A.CIDATE) + 1 
     ELSE 0 
    END AS MASA_PAJAK 
FROM V_CLAIM_INTERNAL A