是否有任何理由不能在SQL Server中选择一个语句?

Mat*_*ell 5 sql t-sql sql-server

我想知道为什么以下失败:

SELECT price<500 as PriceIsCheap
Run Code Online (Sandbox Code Playgroud)

并强迫您执行以下操作:

SELECT CASE WHEN (price<500) THEN 1 ELSE 0 END as PriceIsCheap
Run Code Online (Sandbox Code Playgroud)

如果,按照回答此相关的问题时,转换表说,隐式转换应该发生.

Dea*_*ing 6

在SQL没有布尔数据类型,BIT是怎样的一个黑客,但主要问题是,由于的SQL概念NULL真正的布尔逻辑是不可能的(例如,你会有什么回报查询,如果priceNULL?)

请注意,我并不是说没有可能的方法来实现"大部分"工作的布尔逻辑(例如,你可以说TRUE OR NULLNULL或者其他)只是设计SQL标准的人无法决定The One布尔逻辑的真实表示(例如,您也可以认为TRUE OR NULLTRUE,因为TRUE OR <anything>TRUE).

布尔表达式(=,<=,> =等)仅在某些地方(特别是WHERE子句和CASE标签)有效,而不在任何其他地方有效.