在创建条件where子句时,我需要一些帮助。我想做的是,如果我使用的变量之一为空,则使用特定的where子句,否则使用该变量
例如,我有客户表,客户和其他客户详细信息。除此之外,我还有InsertDate和UpdateDate。
Declare @CustomerID Nvarchar(20) = '';
Declare @StartDate Date = '2019-05-05'
Declare @EndDate Date = DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 1, -1);
在这里,我将@CustomerID保留为空。因此,如果该字段为空,则使用@StartDate和@EndDate之间的InsertDate查找数据,否则通过CustomerID查找数据。
但是当我尝试这样做时,我对此有疑问。
Select
*
From
CustomerDetals
where
(
Case
When
ISNULL(@CustomerID, '') = ''
Then
Convert(Date, InsertDate) >= @StartDate
and Convert(Date, InsertDate) <= @EndDate
Else
CustomerID = @CustomerID
End
)
我遇到的错误是
“>”附近的语法不正确。
我该如何解决?
如果您对此信息不清楚或不确定,我们可以在评论中进行讨论,而不是直接将其降级。
答案 0 :(得分:0)
1。您可以使用此语句
Select * CustomerDetals
where ( ISNULL(@CustomerID, '')= 0 and Convert(Date, InsertDate) >=
@StartDate and Convert(Date, InsertDate)<=@EndDate )
or (CustomerID = @CustomerID )
2。您可以编写动态查询
DECLARE @sqlCommand nvarchar(1000)
Declare @CustomerID Nvarchar(20) = ''
Declare @StartDate Date = '2019-05-05'
Declare @EndDate Date = DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 1, -1);
SET @sqlCommand = 'Select * from CustomerDetals where 1=1 '
IF ISNULL(@CustomerID, '')= ''
BEGIN
SET @sqlCommand +=' and Convert(Date, InsertDate) >='''+ @StartDate + ''' and
Convert(Date, InsertDate)<= ''' + @EndDate + ''''
END
ELSE
BEGIN
SET @sqlCommand +=' and CustomerID = ''' + @CustomerID + ''''
END
EXECUTE sp_executesql @sqlCommand
答案 1 :(得分:0)
我从哪里开始。首先,正确设置代码格式,以便于阅读。
#imagem_destaque{
min-height: 250px;
max-width: 300px;
}
#titulo_menu{
max-width: 300px;
background-color:#C2C23A;
font-weight: bold;
font-size: 20px;
color: white;
line-height: 2;
padding-left: 10px;
}
#titulo_menu:hover{
color: white;
text-decoration:none;
}
第一个错误,没有Select * CustomerDetals
where (
Case
When ISNULL(@CustomerID, '')= '' Then Convert(Date, InsertDate) >= @StartDate and Convert(Date, InsertDate)<=@EndDate
Else CustomerID = @CustomerID
End
)
关键字。
第二个错误,您打算在FROM
语句中做什么?甚至没有意义。
答案 2 :(得分:0)
我会像这样查询这个问题。
Select *
From CustomerDetals
WHERE
(
Convert(Date, InsertDate) >= @StartDate
and
Convert(Date, InsertDate) <= @EndDate
AND
@CustomerID IS NULL
)
OR
(
CustomerID = @CustomerID
)