YashanDB比较运算符

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一元是否[不]等于NULLIS 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)数值型与布尔型统一规则

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

数据类型TINYINTSMALLINTINTBIGINTBITNUMBERFLOATDOUBLEBOOLEAN
TINYINTTINYINTSMALLINTINTBIGINTBIGINTNUMBERFLOATDOUBLETINYINT
SMALLINTSMALLINTSMALLINTINTBIGINTBIGINTNUMBERFLOATDOUBLESMALLINT
INTINTINTINTBIGINTBIGINTNUMBERFLOATDOUBLEINT
BIGINTBIGINTBIGINTBIGINTBIGINTBIGINTNUMBERFLOATDOUBLEBIGINT
BITBIGINTBIGINTBIGINTBIGINTBITNUMBERBIGINT
NUMBERNUMBERNUMBERNUMBERNUMBERNUMBERNUMBERFLOATDOUBLE
FLOATFLOATFLOATFLOATFLOATFLOATFLOATDOUBLE
DOUBLEDOUBLEDOUBLEDOUBLEDOUBLEDOUBLEDOUBLEDOUBLE
BOOLEANTINYINTSMALLINTINTBIGINTBIGINTBOOLEAN
# (2)数值型、布尔型与字符型统一规则

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

数据类型整型数值BITNUMBERFLOATDOUBLEBOOLEAN字符型
整型数值(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
字符型NUMEBRBITNUMEBRFLOATDOUBLEBOOLEAN字符型*

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 dual
WHERE '0'<4;
           1

           1
   
 
SELECT 1 FROM dual
WHERE true LIKE 'true%';
           1

           1

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

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

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

数据类型RAW字符型
RAWRAWRAW
字符型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运算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值