为什么许多语言(据我可以检查)按顺序and
然后or
(像往常一样)处理条件和按位布尔运算符,但是MS SQL Server和PostgreSQL没有?
的JavaScript
a = true || true && true && false; // true
a = true | true & true & false; // 1
a = 1 | 1 & 1 & 0; // 1
爪哇
a = true || true && true && false; // true
a = true | true & true & false; // true
a = 1 | 1 & 1 & 0; // 1
Python
a = True or True and True and False // true
a = 1 | 1 & 1 & 0 // 1
的Delphi
a := true or true and true and false; // true
a := 1 or 1 and 1 and 0; // 1
PHP
$a = true | true & true & false; // 1
$a = true || true && true && false; // 1
c(CentOS下的gcc)
a = true || true && true && false; // true
a = true | true & true & false; // true
a = 1 || 1 && 1 && 0; // 1
a = 1 | 1 & 1 & 0; // 1
的MySQL
select 1 | 1 & 1 & 0 a -- 1
select true | true & true & false -- 1
select true || true && true && false -- 1
SQL Server
select 1 | 1 & 1 & 0 a -- 0 !
select cast(1 as bit) | cast(1 as bit) &
cast(1 as bit) & cast(0 as bit) -- 0 !
的PostgreSQL
select true or true and true and false a -- true
select 1 | 1 & 1 & 0 a -- 0 !
select 1::bit | 1::bit & 1::bit & 0::bit a -- 0 !
答案 0 :(得分:2)
|和& SQL中的运算符是bitwise operators,而不是逻辑运算符。按位|和&在precedence in SQL Server中等于MySQL & is higher than |。
SQL中的逻辑运算符为and
,or
等