逻辑操作符
M-Compatibility模式下支持AND(&&)、OR(||)、NOT(!)、XOR四个逻辑操作符,详见表1。运算结果有三种结果,分别为TRUE、FALSE和空值。
| 运算符 | 操作数 | 含义 |
|---|---|---|
| NOT/! | 一元 | 逻辑非 |
| AND/&& | 二元 | 逻辑与 |
| OR/|| | 二元 | 逻辑或 |
| XOR | 二元 | 逻辑异或 |
运算规则请参见NOT操作符和AND、OR、XOR操作符,表中的a和b代表逻辑表达式。
NOT操作符
如果操作数为真,则计算结果为假。如果操作数为假,则计算结果为真。
取值范围:布尔类型
运算规则:
| a | NOT a |
|---|---|
| TRUE | FALSE |
| FALSE | TRUE |
| NULL | 空值 |
“!”和“NOT”功能相同,但是“!”的优先级高于“NOT”。
示例:
m_db=# SELECT NOT TRUE; ?column? ---------- f (1 row) m_db=# SELECT NOT FALSE; ?column? ---------- t (1 row) m_db=# SELECT NOT NULL; ?column? ---------- (1 row)
AND、OR、XOR操作符
AND、OR、XOR的运算逻辑如下:
| a | b | a AND b的结果 | a OR b的结果 | a XOR b的结果 |
|---|---|---|---|---|
| TRUE | TRUE | TRUE | TRUE | FALSE |
| TRUE | FALSE | FALSE | TRUE | TRUE |
| TRUE | NULL | 空值 | TRUE | 空值 |
| FALSE | FALSE | FALSE | FALSE | FALSE |
| FALSE | NULL | FALSE | 空值 | 空值 |
| NULL | NULL | 空值 | 空值 | 空值 |
操作符AND、XOR和OR具有交换性,即交换左右两个操作数,不影响其结果。
示例:
m_db=# SELECT TRUE AND TRUE; ?column? ---------- t (1 row) m_db=# SELECT TRUE OR FALSE; ?column? ---------- t (1 row) m_db=# SELECT TRUE XOR NULL; ?column? ---------- (1 row)
逻辑操作符规格约束
逻辑运算支持当前M-Compatibility数据库所有已支持的数据类型。不同大类型之间的数据操作时,先提升到大类型,再根据提升后的大类型的结果是否为0进行计算。提升规则如下表所示。
| 操作符 | 左右入参类型 | 归类类型 |
|---|---|---|
| XOR | 所有类型 | BIGINT |
| AND、OR、NOT | TINYINT、SMALLINT、MEDIUMINT、INT/INTEGER、BIGINT、TINYINT UNSIGNED、SMALLINT UNSIGNED、MEDIUMINT UNSIGNED、INT/INTEGER UNSIGNED、BIGINT UNSIGNED、BIT、YEAR、BOOL/LBOOLEAN | BIGINT |
| 其它 | DOUBLE |