SQL Server:如果参数不为null且有一个条件为false,则选择all
我试图用下面的代码获取数据,其场景如下SQL Server:如果参数不为null且有一个条件为false,则选择all,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图用下面的代码获取数据,其场景如下 当@status=0且日期不为空时,则获取筛选数据 当@status=1且日期不为空时,选择所有数据 当@status=1且日期为空时,选择所有数据 declare @status int = 0, @date datetime = '2018-12-01 09:48:34.343' select CreatedTime from AspNetUsers where @date is null or (@status = 1
declare @status int = 0,
@date datetime = '2018-12-01 09:48:34.343'
select CreatedTime
from AspNetUsers
where @date is null
or (@status = 1 and CreatedTime > '2018-12-01 09:48:34.343')
您描述的逻辑由以下人员处理:
where (@status = 0 and CreatedTime > @date) or
(@status = 1)
不清楚为什么您有两个不同的变量。您描述的逻辑由以下人员处理:
where (@status = 0 and CreatedTime > @date) or
(@status = 1)
DECLARE @status INT = 0,
@date DATETIME = '2018-12-01 09:48:34.343'
DECLARE @RQuery NVARCHAR(MAX)
SET @RQuery = ' WHERE 1 = 1 '
IF @status = 0 AND @date IS NOT NULL
BEGIN
SET @RQuery = @status + ' = 0 AND CreatedTime ' + CAST(@date AS DATE)
END
ELSE IF @status = 1 AND @date IS NOT NULL
BEGIN
SET @RQuery = ''
END
ELSE IF @status = 1 AND @date IS NULL
BEGIN
SET @RQuery = ''
END
DECLARE @RQueryFULL NVARCHAR(MAX)
SET @RQueryFULL = ''
SET @RQueryFULL = 'SELECT CreatedTime
FROM AspNetUsers ' + @RQuery
EXEC @RQueryFULL
Try This
不清楚为什么有两个不同的变量。样本数据和期望的结果确实会有帮助。是的。请包括预期结果……cenario 2和3是否相同?您只能检查状态变量。如果使用2个查询作为变量状态,则不属于表中。您可以使用“IF”的语句来执行此操作:IF(@status=1)从AsNetUsers中选择*。如果(@status=0),请从AspNetUsers中选择*。我读对了吗?当
@status=0且date为null时该怎么办?样本数据和期望的结果将非常有用。是的。请包括预期结果……cenario 2和3是否相同?您只能检查状态变量。如果使用2个查询作为变量状态,则不属于表中。您可以使用“IF”的语句来执行此操作:IF(@status=1)从AsNetUsers中选择*。如果(@status=0),请从AspNetUsers中选择*。我读对了吗?如果@status=0,date为null,该怎么办?
DECLARE @status INT = 0,
@date DATETIME = '2018-12-01 09:48:34.343'
DECLARE @RQuery NVARCHAR(MAX)
SET @RQuery = ' WHERE 1 = 1 '
IF @status = 0 AND @date IS NOT NULL
BEGIN
SET @RQuery = @status + ' = 0 AND CreatedTime ' + CAST(@date AS DATE)
END
ELSE IF @status = 1 AND @date IS NOT NULL
BEGIN
SET @RQuery = ''
END
ELSE IF @status = 1 AND @date IS NULL
BEGIN
SET @RQuery = ''
END
DECLARE @RQueryFULL NVARCHAR(MAX)
SET @RQueryFULL = ''
SET @RQueryFULL = 'SELECT CreatedTime
FROM AspNetUsers ' + @RQuery
EXEC @RQueryFULL
Try This