#比较运算符

YashanDB提供如下比较运算符:

运算符 操作数 含义 NULL参与运算
= 二元 等于 结果为NULL
!= 或 <> 二元 不等于 结果为NULL
> 二元 大于 结果为NULL
>= 二元 大于等于 结果为NULL
< 二元 小于 结果为NULL
<= 二元 小于等于 结果为NULL
[NOT] IN 二元 左边数据是否在右边数据集合中 * 左边数据为NULL:结果为NULL
* 右边集合包含NULL:如果集合中有非NULL值与左边数据相等,则结果为true,否则为NULL
[NOT] LIKE 二元 左边数据是否与右边数据匹配 结果为NULL
[NOT] BETWEEN AND 三元 第一个数据是否在第二个数据和第三个数据组成的区间内 结果为NULL
IS [NOT] NULL 一元 是否等于NULL 返回符合要求的行

比较运算符在SQL语法中的详细运用请参考condition条件子句描述。

# 运算优先级

从高到低的运算优先级为:

  • =、!= 或 <>、>、>=、<、<=
  • [NOT] IN、IS [NOT] NULL、[NOT] LIKE
  • [NOT] BETWEEN AND

可以使用双括号()来调整想达到的运算优先级。

# 数据类型

在执行=、!= 或 <>、>、>=、<、<=比较符运算时,如下数据类型可能会参与到比较运算中:

  • 数值型
  • 字符型
  • 日期型
  • 布尔型
  • RAW

# 类型转换

如果比较符两边的数据类型不一致,YashanDB将通过隐式数据转换,将其中一边的数据类型向另一边统一,统一原则为:

  • 数值型最小提升规则:按TINYINT->SMALLINT->INT->BIGINT->NUMBER->FLOAT->DOUBLE顺序向后统一。

  • BIT向BIGINT/NUMBER统一。

  • 字符型向其他类型统一。

  • DATE向TIMESTAMP统一,TIME向DS_INTERVAL统一。

  • 布尔型向数值型统一。

# (1)数值型与布尔型统一规则

行列标题格为参与=、!= 或 <>、>、>=、<、<=比较符运算的数据类型;内容单元格为统一后的数据类型;–表示不支持两种数据类型参与比较运算。

数据类型 TINYINT SMALLINT INT BIGINT BIT NUMBER FLOAT DOUBLE BOOLEAN
TINYINT TINYINT SMALLINT INT BIGINT BIGINT NUMBER FLOAT DOUBLE TINYINT
SMALLINT SMALLINT SMALLINT INT BIGINT BIGINT NUMBER FLOAT DOUBLE SMALLINT
INT INT INT INT BIGINT BIGINT NUMBER FLOAT DOUBLE INT
BIGINT BIGINT BIGINT BIGINT BIGINT BIGINT NUMBER FLOAT DOUBLE BIGINT
BIT BIGINT BIGINT BIGINT BIGINT BIT NUMBER -- -- BIGINT
NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER FLOAT DOUBLE --
FLOAT FLOAT FLOAT FLOAT FLOAT -- FLOAT FLOAT DOUBLE --
DOUBLE DOUBLE DOUBLE DOUBLE DOUBLE -- DOUBLE DOUBLE DOUBLE --
BOOLEAN TINYINT SMALLINT INT BIGINT BIGINT -- -- -- BOOLEAN

# (2)数值型、布尔型与字符型统一规则

行列标题格为参与=、!= 或 <>、>、>=、<、<=比较符运算的数据类型;内容单元格为统一后的数据类型,其中(1)表示采用上面(1)数值型与布尔型统一规则;–表示不支持两种数据类型参与比较运算。

数据类型 整型数值 BIT NUMBER FLOAT DOUBLE BOOLEAN 字符型
整型数值 (1) (1) (1) (1) (1) (1) NUMEBR
BIT (1) (1) (1) (1) (1) (1) BIT
NUMBER (1) (1) (1) (1) (1) (1) NUMEBR
FLOAT (1) (1) (1) (1) (1) (1) FLOAT
DOUBLE (1) (1) (1) (1) (1) (1) DOUBLE
BOOLEAN (1) (1) (1) (1) (1) (1) BOOLEAN
字符型 NUMEBR BIT NUMEBR FLOAT DOUBLE BOOLEAN 字符型*

Note

字符型与字符型的比较,执行的是大小写敏感的字符串比较,详细描述请参考字符型文档。

# (3)数值型、布尔型、字符型与日期型统一规则

行列标题格为参与=、!= 或 <>、>、>=、<、<=比较符运算的数据类型;内容单元格为统一后的数据类型,其中(2)表示采用上面(2)数值型、布尔型与字符型统一规则;–表示不支持两种数据类型参与比较运算。

数据
类型
数值型 字符型 BOOLEAN DATE TIMESTAMP YM_
INTERVAL
DS_
INTERVAL
TIME
数值型 (2) (2) (2) -- -- -- -- --
字符型 (2) (2) (2) DATE TIMESTAMP YM_
INTERVAL
DS_
INTERVAL
TIME
BOOLEAN (2) (2) (2) -- -- -- -- --
DATE -- DATE -- DATE TIMESTAMP -- -- --
TIMESTAMP -- TIMESTAMP -- TIMESTAMP TIMESTAMP -- -- --
YM_
INTERVAL
-- YM_
INTERVAL
-- -- -- YM_
INTERVAL
-- --
DS_
INTERVAL
-- DS_
INTERVAL
-- -- -- -- DS_
INTERVAL
DS_
INTERVAL
TIME -- TIME -- -- -- -- DS_
INTERVAL
TIME

示例

--NULL参与比较
SELECT SYSDATE FROM DUAL WHERE NULL IN (1,NULL);
SYSDATE                        
--------------------------------
   
   
SELECT SYSDATE FROM DUAL WHERE 1 IN (1,NULL);
SYSDATE                        
--------------------------------
2021-06-08 10:05:53           
   
SELECT SYSDATE FROM DUAL WHERE 1 IN (2,NULL);
SYSDATE                        
--------------------------------
   
  
--字符型与数值型比较时的隐式转换
SELECT 1 FROM dual
WHERE '0'<4;
           1
------------
           1
   
 --布尔型与字符型比较时的隐式转换
SELECT 1 FROM dual
WHERE true LIKE 'true%';
           1
------------
           1

# (4)RAW类型与字符型统一规则

RAW类型只可与自身或字符型进行比较,规则如下:

(行列标题格为参与=、!= 或 <>、>、>=、<、<=比较符运算的数据类型;内容单元格为统一后的数据类型。)

数据类型 RAW 字符型
RAW RAW RAW
字符型 RAW 字符型