如何在 SQL 查询中动态跳过没有 If else 的 where 子句?
Posted
技术标签:
【中文标题】如何在 SQL 查询中动态跳过没有 If else 的 where 子句?【英文标题】:How to skip where clause without If else in SQL query dynamically? 【发布时间】:2022-01-11 12:36:35 【问题描述】:我正在尝试编写查询,但如果存在搜索数据,则需要动态应用 WHERE
子句,否则在单个查询中跳过该部分。
Declare @search_text varchar(50)='', @start_date datetime, @end_date datetime;
If(@search_text = '')
begin
select * from Table1 where
CONVERT(VARCHAR(12), Mydate, 101) BETWEEN CONVERT(Date, @start_date) AND
CONVERT(Date,@end_date)
end
else
begin
select * from Table1 where column1 like '%'+@search_text+'%'
end
我正在尝试,但它不起作用:
select * from Table1 where ( Case when ISNULL(@search_text,'') = '' Then CONVERT(VARCHAR(12), MyDate, 101) END
BETWEEN CONVERT(Date, @start_date) AND CONVERT(Date,@end_date) )
【问题讨论】:
mysql 和 SQL Server 是完全不同的产品;请正确标记。 适用于 SQL Server。刚刚修改 注意 - 您的搜索条件不是 sargable,您的 Mydate 是什么数据类型? 为什么要将日期转换为varchar
?
当您显然只关心日期时,为什么将日期参数声明为datetime
?马虎的代码鼓励错误。使用唯一的日期上限,您可以放心地忽略您引用的(可能)日期时间列中的任何时间问题。
【参考方案1】:
您可以将逻辑与单个 WHERE
子句组合在单个查询中:
SELECT *
FROM Table1
WHERE
@search_text = '' AND CONVERT(VARCHAR(12), Mydate, 101)
BETWEEN CONVERT(Date, @start_date) AND CONVERT(Date, @end_date) OR
@search_text <> '' AND column1 LIKE '%' + @search_text + '%';
【讨论】:
以上是关于如何在 SQL 查询中动态跳过没有 If else 的 where 子句?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL 中编写 if else if 条件 |甲骨文 |