【发布时间】:2014-03-06 05:46:51
【问题描述】:
我正在使用 SQL Server 2008 R2。
我有一个如下的 SQL 块:
DECLARE @Day INT = 5
DECLARE @Month INT = NULL
DECLARE @year INT = NULL
DECLARE @dtnow DATETIME
SET @dtnow = GETDATE()
IF @Month IS NULL
SELECT @Month = MONTH(DATEADD(MONTH,-1, @dtnow ))
IF @Year IS NULL
SELECT @year = YEAR(DATEADD(MONTH,-1, @dtnow ))
SELECT *
FROM TblSalesRecords
WHERE
CASE WHEN @Day IS NULL THEN -- Condition One
BEGIN
ISNULL(@Month, MONTH(TblSalesRecords.CreatedDate)) = MONTH(TblSalesRecords.CreatedDate)
AND (@year, YEAR(TblSalesRecords.CreatedDate)) = YEAR(TblSalesRecords.CreatedDate)
END
ELSE -- Condition two
BEGIN
TblSalesRecords.CreatedDate BETWEEN CONVERT(DATETIME, CONVERT(VARCHAR,YEAR(DATEADD(MONTH,-1, @dtnow ))) + '-' + CONVERT(VARCHAR,month(DATEADD(MONTH,-1,@dtnow))) + '-' + CONVERT(VARCHAR, DAY(DATEADD(MONTH,-1,@dtnow))) +' 00:00:00.000')
AND CONVERT (DATETIME, CONVERT(VARCHAR,YEAR(DATEADD(DAY,-1,@dtnow ))) + '-' + CONVERT(VARCHAR,MONTH(DATEADD(DAY,-1,@dtnow))) + '-' + CONVERT(VARCHAR, DAY(DATEADD(DAY,-1,@dtnow))) +' 23:59:59.998')
END
END
AND TblSalesRecords.IsDeleted=0
我想要实现的是,
如果@Day设置为NULL,那么它应该执行的CASE..WHEN语句--条件一 else --条件二。
但在CASE..WHEN 语句中,"=" 附近出现语法错误。
谁能告诉我如何做到这一点?
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2