Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


COMPARE

📄字数 1.0K
👁️阅读量 加载中...

功能描述

大对象比较。

先比较长度,如果长度不相等,返回 1

如果长度相等,继续比较值,返回值为第一个不相等字节的差值(无符号字符相减,转换为有符号整数),如果第一个参数等于第二个参数,则返回 0

语法格式

sql
COMPARE(expr1, expr2)

输入参数

  • expr1: BLOBCLOB 类型,或能隐式转换为 BLOBCLOB 类型的其他类型。
  • expr2: BLOBCLOB 类型,或能隐式转换为 BLOBCLOB 类型的其他类型。

提示

  • NULL 无具体的类型,参数均为 NULL 时,会产生异常 E10100 候选函数出现多义性,需要手动为参数指定具体的类型,如:COMPARE(NULL::BLOB, NULL)

输出结果

返回 INTEGER 类型,任意输入参数为 NULL 时,输出结果为 NULL

输出结果规则如下:

  • expr1expr2 的长度不相等,返回 1
  • expr1 小于 expr2:返回 负数
  • expr1 等于 expr2:返回 0
  • expr1 大于 expr2:返回 正数

注意

  • 该函数在 Windows 环境下固定返回 -1(小于)0(等于)1(大于) 三个值。在 Linux 环境下返回第一个不相等字节的差值,返回值包括:负数(小于) 0(等于) 正数(大于),实际返回结果和函数内部实现相关,这里不做讨论。应该关注返回结果是 正数负数0 或者 1
  • 例如:Windows 环境下,COMPARE('10', '15'),返回结果为 -1,表示 10 小于 15Linux 环境下,COMPARE('10', '15'),返回结果为 -1280(0x3031 - 0x3531),也表示 10 小于 15

示例

Liunx 平台为例:

sql
-- 比较字符串
SQL> SELECT COMPARE('1.9', '2.1');

+-------+
| EXPR1 |
+-------+
| -1    |
+-------+

-- 比较的长度不相等
SQL> SELECT COMPARE('19', '211');

+-------+
| EXPR1 |
+-------+
| 1     |
+-------+

SQL> CREATE TABLE tab_test_lob(col1 BLOB, col2 CLOB);

SQL> INSERT INTO tab_test_lob VALUES ('a123b456c741d852c963f', '1测试qaz@#¥^&*');

SQL> INSERT INTO tab_test_lob VALUES ('789a456b123cc963f741d', '2测试qaz@#¥^&*');

-- 比较BLOB类型
SQL> SELECT COMPARE(col1, '789a456b123cc963f741d'::BLOB) FROM tab_test_lob;

+-------+
| EXPR1 |
+-------+
| 3     |
| 0     |
+-------+

-- 比较CLOB类型
SQL> SELECT * FROM tab_test_lob WHERE COMPARE(col2, '测试qaz@#¥') = 1;

+--------+--------+
|  COL1  |  COL2  |
+--------+--------+
| <BLOB> | <CLOB> |
| <BLOB> | <CLOB> |
+--------+--------+