Sql 不使用'的If语句;案例';

Sql 不使用'的If语句;案例';,sql,sql-server,tsql,Sql,Sql Server,Tsql,假设我想使用SQL对某些内容进行简单检查,并将答案转换为一个位(布尔值)。例如,我想通过检查车轮的数量来检查某物是否是一辆汽车。我可以这样做: CASE WHEN NumberOfWheels > 2 THEN 1 ELSE 0 END AS 'IsCar' 但这只给出了正确的值,而不是正确的数据类型。因此,我还需要添加一个转换为位 CAST( (CASE WHEN NumberOfWheels > 2 THEN 1 ELSE

假设我想使用SQL对某些内容进行简单检查,并将答案转换为一个位(布尔值)。例如,我想通过检查车轮的数量来检查某物是否是一辆汽车。我可以这样做:

CASE
    WHEN NumberOfWheels > 2 THEN 1
    ELSE 0
END AS 'IsCar'
但这只给出了正确的值,而不是正确的数据类型。因此,我还需要添加一个
转换为位

CAST(
    (CASE
        WHEN NumberOfWheels > 2 THEN 1
        ELSE 0
    END)
AS BIT) 'IsCar'
现在这需要两个操作(
CAST
CASE
)而不是一个操作。而且它的可读性稍差。是否有可能以更简单的方式进行陈述,最好不使用
CASE
。我想要这样的东西(不起作用):


这甚至有点可能吗?

不,这是不可能的。T-SQL既没有布尔类型,也没有类型化的
BIT
literals,因此无论您以何种方式对其进行切片,都将涉及转换。通过使用
IIF
而不是
CASE
,您仍然可以减少一些赘言,并且(在我看来)
CONVERT
CAST
稍微容易阅读,但这并不会改变基本原理:

SELECT IsCar = CONVERT(BIT, IIF(NumberOfWheels > 2, 1, 0))

不,这是不可能的。T-SQL既没有布尔类型,也没有类型化的
BIT
literals,因此无论您以何种方式对其进行切片,都将涉及转换。通过使用
IIF
而不是
CASE
,您仍然可以减少一些赘言,并且(在我看来)
CONVERT
CAST
稍微容易阅读,但这并不会改变基本原理:

SELECT IsCar = CONVERT(BIT, IIF(NumberOfWheels > 2, 1, 0))

这是一个非常简单的查询,我看不出
CAST
CASE
有任何错误。我认为没有比这更简单的了。试着使用True和false顺便说一句,有些DBMS在选择列表中的
NumberOfWheels>2
起作用,并返回
True
false
:-)虽然简单,但仍然是可能的两倍复杂(如果我能做我想做的事)。关于数据库提供程序的选择,我无法控制。如果CAST是个问题,则声明一个bit并返回bit变量,而不是1或0。这是一个非常简单的查询,我看不出
CAST
CASE
有任何错误。我认为没有比这更简单的了。试着使用True和false顺便说一句,有些DBMS在选择列表中的
NumberOfWheels>2
起作用,并返回
True
false
:-)虽然简单,但仍然是可能的两倍复杂(如果我能做我想做的事)。关于数据库提供程序的选择,我无法控制。如果CAST是个问题,请声明一个bit并返回bit变量,而不是1或0谢谢。至少你让它看起来更漂亮了:-)。与我最初的建议相比,性能有什么不同吗?@Noceo:完全没有。内部
IIF
被重写为
案例
,因此两个表达式的执行计划完全相同。谢谢。至少你让它看起来更漂亮了:-)。与我最初的建议相比,性能有什么不同吗?@Noceo:完全没有。在内部,
IIF
被重写为一个
案例
,因此两个表达式的执行计划完全相同。