Sql server 同一列的Where子句中的多个条件
如何为以下条件编写MS SQL语句 我有一个表单,允许用户在范围内输入日期(Sql server 同一列的Where子句中的多个条件,sql-server,tsql,Sql Server,Tsql,如何为以下条件编写MS SQL语句 我有一个表单,允许用户在范围内输入日期(fromDate&toDate)和ID(fromID&toID)。所有字段可以为空,或仅输入from或to字段或同时输入from和to字段。选择基于要选择的输入值。以下是为输入的值签入where子句的条件 未输入值=>跳过所有条件 仅在fromDate中输入的值=>Date=frDate 仅在toDate中输入的值=>fromDate和toDate之间的日期 条件也应用于ID字段。 非常感谢您的建议。 提前感谢。您可以使
fromDate
&toDate
)和ID(fromID
&toID
)。所有字段可以为空,或仅输入from或to字段或同时输入from和to字段。选择基于要选择的输入值。以下是为输入的值签入where子句的条件
未输入值=>跳过所有条件
仅在fromDate中输入的值=>Date=frDate
仅在toDate中输入的值=>fromDate和toDate之间的日期
条件也应用于ID字段。
非常感谢您的建议。
提前感谢。您可以使用动态查询解决您的问题。你的问题不是很清楚。在这里,我给你一个解决方案,它将帮助你解决你的问题。试试这个: 1。在存储过程中创建动态查询
CREATE PROCEDURE sp_YourSPName
/* Input Parameters */
@FromDate DATETIME ,
@ToDate DATETIME
AS
SET NOCOUNT ON
/* Variable Declaration */
DECLARE @SQLQuery AS NVARCHAR(4000)
DECLARE @ParamDefinition AS NVARCHAR(2000)
/* Build the Transact-SQL String with the input parameters */
SET @SQLQuery = 'Select * From YourTableName where (1=1) '
/* check for the condition and build the WHERE clause accordingly */
IF (@FromDate IS NOT NULL)
AND (@ToDate IS NOT NULL)
SET @SQLQuery = @SQLQuery +
' And (YourDate BETWEEN @FromDate AND @ToDate)'
IF (@FromDate IS NULL)
AND (@ToDate IS NOT NULL)
SET @SQLQuery = @SQLQuery + ' And (YourDate <= @ToDate)'
IF (@FromDate IS NOT NULL)
AND (@ToDate IS NULL)
SET @SQLQuery = @SQLQuery + ' And (YourDate = @FromDate)'
/* Specify Parameter Format for all input parameters included
in the stmt */
SET @ParamDefinition = '@StartDate DateTime,
@EndDate DateTime'
/* Execute the Transact-SQL String with all parameter value's Using sp_executesql Command */
EXECUTE sp_Executesql @SQLQuery,
@ParamDefinition,
@FromDate,
@ToDate
IF @@ERROR <> 0
GOTO ErrorHandler
SET NOCOUNT OFF
RETURN(0)
ErrorHandler :
RETURN(@@ERROR)
GO
下面是一个示例,而不是您可以尝试使用CASE语句将其置于您的方式中的确切查询
SELECT values
FROM Table
WHERE CASE
WHEN fromDate = null & todate = null THEN
WHEN fromDate != null & toDate != null THEN Date between fromDate and toDate
WHEN fromDate != null THEN Date = frDate
WHEN toDate != null THEN Date = toDate
您可以使用IS NULL检查参数是否有值
SELECT * FROM Table
WHERE (@FromDate IS NULL OR Date > @FromDate) AND (@ToDate IS NULL OR Date < @ToDate)
从表中选择*
其中(@FromDate为NULL或Date>@FromDate)和(@ToDate为NULL或Date<@ToDate)
Id将使用相同类型的查询“任何建议”都不是问题。发布问题时,您需要提出一个问题,以及(重要的)一个特定的问题。然而,目前还不太清楚,这听起来像是在询问Catch-all查询:我认为最好在服务器端动态构建where子句。听起来像是很多,到目前为止你都尝试了什么???谢谢你的回复。它确实有用。但我之前做过,发现查询语句的执行非常冗长和缓慢。
SELECT * FROM Table
WHERE (@FromDate IS NULL OR Date > @FromDate) AND (@ToDate IS NULL OR Date < @ToDate)