ITPub博客

首页 > 数据库 > 国内数据库 > YashanDB比较运算符

YashanDB比较运算符

国内数据库 作者:崖山数据库系统YashanDB 时间:2025-04-01 18:43:49 0 删除 编辑

YashanDB提供如下比较运算符:

运算符 操作数 含义 NULL参与运算
= 二元 等于 结果为FALSE
!= 或 <> 二元 不等于 结果为FALSE
> 二元 大于 结果为FALSE
>= 二元 大于等于 结果为FALSE
< 二元 小于 结果为FALSE
<= 二元 小于等于 结果为FALSE
[NOT] IN 二元 左边数据是否[不]在右边数据集合中 IN:
* 左边数据为NULL:结果为FALSE


* 右边集合包含NULL:如果集合中有非NULL值与左边数据相等,则结果为TRUE,否则为FALSE


NOT IN:


* 左边数据为NULL:结果为FALSE


* 右边集合包含NULL:如果集合中含有NULL值,则返回FALSE;如果集合中不含NULL值,且所有数据与左边数据不相等,则结果为TRUE,否则为FALSE


[NOT] LIKE 二元 左边数据是否与右边数据[不]匹配 结果为FALSE
[NOT] BETWEEN AND 三元 第一个数据是否[不]在第二个数据和第三个数据组成的区间内 结果为FALSE
IS [NOT] NULL 一元 是否[不]等于NULL IS NULL:
* 操作数为NULL:结果为TRUE


* 操作数不为NULL:结果为FALSE


IS NOT NULL:


* 操作数为NULL:结果为FALSE


* 操作数不为NULL:结果为TRUE


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

运算优先级


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

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

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

数据类型


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

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

# 类型转换

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

  • 数值型最小提升规则:按TINYINT->SMALLINT->INT->BIGINT->NUMBER->FLOAT->DOUBLE顺序向后统一。
  • BIT型数据与BIGINT、NUMBER型数据进行运算时,将会向BIGINT/NUMBER型统一。
  • 字符型数据与其他类型进行运算时,将会向其他类型统一。
  • DATE型数据与TIMESTAMP型数据进行运算时,将会向TIMESTAMP型统一。
  • TIME型数据与DS_INTERVAL型数据进行运算时,将会向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 |

示例

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 dualWHERE '0'<4;           1
           1
   
 SELECT 1 FROM dualWHERE true LIKE 'true%';           1
           1

Copied!

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

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

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

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

# (4)udt类型比较统一规则

  • OBJECT类型默认只支持等于、不等于运算。已创建方法的OBJECT类型支持等于、不等于、大于、大于等于、小于、小于等于的运算,且根据其方法的结果进行比较。
  • VARRAY类型不支持等于、不等于、大于、大于等于、小于、小于等于运算。
  • TABLE类型只支持等于、不等于运算。
  • 当UDT类型嵌套UDT类型时,目前不支持TABLE类型、未创建方法的OBJECT的比较,其他UDT类型嵌套时每一层UDT类型都需遵循比较规则。
  • 支持等于、不等于运算的类型,也支持[NOT] IN运算。
  • 所有UDT类型不支持[NOT] LIKE运算。
  • 仅已创建方法的OBJECT类型支持[NOT] BETWEEN AND。
  • 所有UDT类型支持IS [NOT] NULL运算。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3079699/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

注册时间:2023-04-11

  • 博文量
    722
  • 访问量
    639963