在SQL中使用AND语句时的大小写
我有这样一个问题:在SQL中使用AND语句时的大小写,sql,sql-server,Sql,Sql Server,我有这样一个问题: 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 CON
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
它正在工作,但当我添加和YeargetDate=2016时,它会抛出一个错误:
Msg 4145,第15级,状态1,第1行
在预期条件的上下文中指定的非布尔型表达式,靠近“AND”
我也尝试转换,但仍然有相同的错误
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
我的问题是什么 这可能是您打算做的:
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
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
请注意,您不需要转换/强制转换调用DATEPART的结果,因为它已返回一个整数。尝试以下查询:
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
这是工作。。非常感谢你。。也感谢您的解释: