如果声明没有使用' CASE'

时间:2018-03-19 07:35:23

标签: sql sql-server tsql

让我们说我想做一些简单的检查,并使用SQL将答案转换为一点(布尔值)。举个例子,我想通过检查车轮的数量来检查是否有车。我能做到这一点:

CASE
    WHEN NumberOfWheels > 2 THEN 1
    ELSE 0
END AS 'IsCar'

但这只给了我正确的值,而不是nessesarilly正确的数据类型。所以我也会添加一个CAST <value> AS BIT

CAST(
    (CASE
        WHEN NumberOfWheels > 2 THEN 1
        ELSE 0
    END)
AS BIT) 'IsCar'

现在这需要两个操作(CASTCASE)而不是一个操作。它的可读性稍差。是否可以以更简单的方式生成语句,最好不使用CASE。我想要这样的东西(这不起作用):

CAST(NumberOfWheels > 2 AS BIT)

这甚至可以远程实现吗?

1 个答案:

答案 0 :(得分:4)

不,这是不可能的。 T-SQL既没有布尔类型也没有类型BIT文字,所以你可以采用任何方式对转换进行切片。您仍然可以使用IIF而不是CASE来减少措辞,并且(在我看来)CONVERTCAST更容易阅读,但是并没有改变基本面:

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