nic*_*u09 1 sql sql-server case
我是SQL Case Statement的新手.当我使用case语句的'between'子句时,它给出了一个错误.查询如下
SELECT CASE
WHEN @Divid=1 THEN CONVERT(varchar(20),datename(mm,m.dob)) + ' ' + CONVERT(varchar(20),datename(DAY ,m.dob))
ELSE CONVERT(varchar(20),datename(mm,m.ActualDOB)) + ' ' + CONVERT(varchar(20),datename(DAY ,m.ActualDOB))
END 'DOB' ,
m.FirstName + ISNULL(m.LastName,'') 'Name',
m.EmployeeNo ,
m.Customer
FROM sEmployeeMaster m
JOIN lDivision d ON m.BizVertical=d.Division
WHERE d.DivisionID= @Divid
AND CASE
WHEN @Divid=1 THEN MONTH(dob) BETWEEN MONTH(getdate()) AND MONTH(getdate()+2)
AND DAY(dob)BETWEEN DAY(getdate()) AND DAY(getdate()+2)
ELSE MONTH(ISNULL(m.ActualDOB,dob) BETWEEN MONTH(getdate()) AND MONTH(getdate()+2)
AND DAY(m.ActualDOB,
dob)BETWEEN DAY(getdate()) AND DAY(getdate()+2)
END
Run Code Online (Sandbox Code Playgroud)
您不能在where子句中使用分支和条件语句.您只需将其更改为完整的逻辑语句:
WHERE d.DivisionID= @Divid
AND (
(@Divid = 1 AND
MONTH(dob) BETWEEN MONTH(getdate()) AND MONTH(getdate()+2)
AND DAY(dob)BETWEEN DAY(getdate()) AND DAY(getdate()+2))
OR
(@Divid <> 1 AND
MONTH(ISNULL(m.ActualDOB,dob) BETWEEN MONTH(getdate()) AND MONTH(getdate()+2)
AND DAY(m.ActualDOB,dob)BETWEEN DAY(getdate()) AND DAY(getdate()+2))
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |