首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在where子句中sqlserver中的Case语句中,一如既往地为true

问在where子句中sqlserver中的Case语句中,一如既往地为true
EN

Stack Overflow用户
提问于 2015-03-04 22:07:41
回答 5查看 1.8K关注 0票数 1

我在MYSQL中使用了始终正确的语句,例如,在where子句的case语句中使用了1 = 1语句,语法如下:

代码语言:javascript
复制
select * from tablename where 
(case when tablefield is not null then 
 then tablefield = 'value'
else 1 = 1 end)

我想知道如何在where子句中的sqlserver/tsql语句中使用1 = 1 (总是true语句)。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-08 14:54:22

对不起,我刚才混淆了查询,我打算在参数变量为null而不是tablefield时请求一个条件--在这种情况下,查询可能如下所示:

选择*从tablename where (当parameterfield_or_variable不是null时,那么tablefield = 'value‘,否则1=1结束)

或者当使用参数字段作为值时(当parameterfield_or_variable为非空时,tablefield = parameter_field_or_variable or 1=1 end)

问题的答案是:KHeaney是对的。

但是,如mysql中所述,tsql/sqlserver中的查询如下所示:

选择*从tablename,其中tablefield =@参数字段-在比较输入参数字段和tablefield或@参数为空的情况下

因此,当@参数字段为null时,它将显示所有结果,否则它将仅限于输入值。

谢谢

票数 0
EN

Stack Overflow用户

发布于 2015-03-04 22:28:50

您将不使用case,您只需要编写一个多条件语句。在你的例子中它看起来就像

代码语言:javascript
复制
Where (tablefield = 'value'
       OR tablefield is null)
票数 6
EN

Stack Overflow用户

发布于 2015-03-04 23:00:11

如果要使用TSQL CASE函数,可以执行以下操作:

代码语言:javascript
复制
select * from tablename where 1 = 
(case when tablefield is not null then 
    (case when tablefield = 'value' then 1 else 0 end)
 else 1 end) 

可简化为:

代码语言:javascript
复制
select * from tablename where 1 = 
(case when tablefield is null then 1 when tablefield = 'value' then 1 
else 0 end)

您可以省略“Other0”部分,因为当没有找到匹配时,将返回NULL (这将不等于1)。即:

代码语言:javascript
复制
select * from tablename where 1 = 
(case when tablefield is not null then 
    (case when tablefield = 'value' then 1 end)
 else 1 end) 

select * from tablename where 1 = 
(case when tablefield is null then 1 when tablefield = 'value' then 1 end)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28865989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档