`

Oracle 字符串比较--- null

阅读更多

ORACLE中字符串比较

 在ORACLE中,将空字符串视为NULL,任何值与NULL比较结果都为NULL。如此一来,在比较两个字符串的时候就会出现意外。请看以下的例子:
DECLARE
    i VARCHAR2(10) := NULL;
    v VARCHAR2(10) := 'ABC';
BEGIN
    IF(i = v) THEN
        DBMS_OUTPUT.PUT_LINE('相等');
    ELSE
        DBMS_OUTPUT.PUT_LINE('不等');
    END IF;
END;
请你用你聪明的头脑判断一下,结果应该是什么?很容易就可以得出结果:'不等'。很好,你是对的。在SQLPLUS上运行的结果和你想的一样。那么我改一下程序,你再判断一下:
DECLARE
    i VARCHAR2(10) := NULL;
    v VARCHAR2(10) := 'ABC';
BEGIN
    IF(i <> v) THEN
        DBMS_OUTPUT.PUT_LINE('不等');
    ELSE
        DBMS_OUTPUT.PUT_LINE('相等');
    END IF;
END;
看上去和第一个程序没有太大的差别,很容易就得出结果:'不等'。呵呵。你确定结果就是这个吗?那么请你在SQLPLUS测试一下,来验证你是正确的。很可惜,正确的结果应该是:'相等'。是不是很诧异?正如开始所说的:任何值与NULL比较结果都为NULL。即在第一个程序中的i=v比较的结果应该是NULL,而第二个程序中的i<>v比较的结果也是NULL。当IF结构中的条件为NULL时,将跳过当前的分支进入到ELSE或者是结束。不行吗?那你运行一下以下的程序将可以等到验证:
BEGIN
    IF(NULL) THEN
        DBMS_OUTPUT.PUT_LINE('NOT NULL');
    ELSE
        DBMS_OUTPUT.PUT_LINE('NULL');
    END IF;
END;
结果输出的是:'NULL'。
那么应该怎样正确的比较两个字符串呢?
首先我先说说如何确定两个字符串相等(还是用上边的两个变量i和v)。
1、当i和v都为NULL的时候,认为i和v相等。i IS NULL AND v IS NULL(不要写成这样:i = v。从上边的分析我们可以知道这样写的结果为NULL)。
2、当i和v中只有一个为NULL,肯定不相等。
3、当i和v都不为NULL的时候,我们就可以用‘=’号来判断它们是否相等。i IS NOT NULL AND v IS NOT NULL AND i = v。
根据以上三点,我们可以得出判断i和v相等的条件表达式:i IS NULL AND v IS NULL OR i IS NOT NULL AND v IS NOT NULL AND i = v。
那么两个字符串不相等的条件表达式只需要判断相等的表达式为FALSE就可以了。
把判断两个字符串是否相等的功能写成函数:

create or replace function isequal(var1 in varchar2, var2 in varchar2)
  return number -- 0:不等 1:相等 -1:错误
 is
begin
  if (var1 is null and var2 is null or
     var1 is not null and var2 is not null and var1 = var2) then
    return 1;
  else
    return 0;
  end if;
exception
  when others then
    return - 1;
end;




引文来源  ORACLE中字符串比较-ORACLE by alixixi.com

分享到:
评论

相关推荐

    oracle通过sql实现字符串转数字oracle函数

    在Oracle数据库中,将字符串转换为数字是一项常见的操作,特别是在处理包含数字的字符串列时,可能需要进行数值计算或按照数值大小进行排序。本篇文章将深入探讨如何在SQL查询中利用Oracle提供的函数来实现这一目标...

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    ORA-01480STR 绑定值的结尾 Null字符缺失 的问题原因及解决办法

    这个错误通常意味着在处理字符串数据时,Oracle无法找到预期的NULL终止符,这可能是由于多种原因引起的。以下是对这个问题的详细分析和解决策略: 首先,我们要理解“STR 绑定值的结尾 Null 字符缺失”错误的可能...

    Oracle 基础语句 函数大全(字符串函数

    在Oracle数据库中,字符串处理是日常数据库操作的重要组成部分。这里我们详细探讨了多个与字符串相关的函数,它们在处理和操作文本数据时非常有用。 1. **SUBSTR** 函数:这个函数用于从字符串中提取子串。基本语法...

    Oracle null的使用

    Sybase 中同样不存在长度为 0 的字符串,但是与 Oracle 不同的是,Sybase 并不将空串视作 NULL,而是视作与只包含一个空格的字符串等价。 Oracle 中 null 的长度是一些文章上说 null 长度为零(×),其实长度也为...

    oracle常用字符函数

    - `LOWER(char)`: 该函数用于将输入的字符串`char`中的所有大写字母转换为小写字母,常用于不区分大小写的查询或比较。 - `UPPER(char)`: 与`LOWER`相反,它将字符串中的所有小写字母转换为大写字母。 - `INITCAP...

    Oracle-SQL培训-V1.0

    以上内容详细介绍了Oracle SQL中的SELECT语句及其相关操作,包括基本语法、数学表达式、NULL处理、别名设置、字符串拼接、条件限制以及排序等方面的知识点。这些知识点是学习和掌握Oracle SQL的重要基础,能够帮助...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...

    Oracle中字符串连接的实现方法

    和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。 比如执行下面的SQL语句: 代码如下:SELECT ‘工号为’||FNumber||’的员工姓名为’||FName FROM T_...

    ORACLE常用数值函数、转换函数、字符串函数介绍

    ### ORACLE常用数值函数、转换函数、字符串函数详细介绍 #### 数值函数 1. **ABS(M)** - **功能**: 返回数值M的绝对值。 - **示例**: 如果输入`-123`, 函数返回`123`。 2. **MOD(M, N)** - **功能**: 返回M...

    Oracle中分组后拼接分组字符串[文].pdf

    Oracle 中分组后拼接分组字符串 在 Oracle 中,分组后拼接分组字符串是一种常见的操作,用于将分组后的多条记录的某字段进行拼接。下面我们来详细介绍如何实现这种操作。 首先,创建一个测试表 `test`,该表包含三...

    oraclesql判断值为空-Oracle-sqlserver的空值(null)判断.pdf

    因此,我们不能像字符串和数字那样进行比较,而是需要使用 `isNull` 和 `is not null` 来判断值是否为空或 Null。 在 Oracle 和 SQL Server 中,我们可以使用 `NVL` 和 `ISNULL` 函数来判断值为空或 Null,並使用 `...

    Oracle中的日期和字符串互相转换

    ### Oracle中的日期和字符串互相转换 在Oracle数据库中,日期和字符串之间的转换是十分常见的操作。这类转换在处理数据时非常有用,可以帮助我们更高效地管理和查询数据。本文将详细介绍Oracle中日期与字符串互相...

    Oracle内置SQL函数-分类整理大全.doc

    - **功能**: 返回一个新的字符串,在原字符串`string1`右侧添加`string2`中的字符,直到达到指定的长度`x`。如果没有指定`string2`,则使用空格填充。 - **使用位置**: 过程性语句和SQL语句。 **1.1.10 RTRIM** - ...

    Oracle----相关常用命令

    - 上述SQL函数提供了丰富的字符串处理、日期处理以及数学运算功能,极大地方便了数据处理和分析工作。 ### 6. 事务管理 - **`commit;`**:提交当前事务,使所有更改永久保存。 - **`rollback;`**:回滚当前事务,...

    jdbc连接oracle字符集不同出现乱码

    这是因为 Java 在处理字符串时默认按照特定的字符集进行解码,而在本例中,Java 应用期望使用 `ZHS16GBK` 解码,但实际上却按照 `US7ASCII` 编码的数据进行了解码,从而导致乱码现象的发生。 #### 解决方案 为了...

    ORACLE-----ORACLE笔记

    2. 数据类型:Oracle支持多种数据类型,如VARCHAR2(可变长度字符串)、NUMBER(数值)、DATE(日期时间)、LONG(长文本)、BLOB(二进制大对象)等,用于存储不同类型的数据。 3. 表的创建:使用CREATE TABLE语句...

    Oracle开发技术--整理

    - 连接号(Concatenation):使用`||`将字符串拼接。 - DISTINCT关键字:去除重复的行。 - ORDER BY:根据指定字段排序,DESC为降序,ASC为升序。 - NULL处理:WHERE子句中可使用IS (NOT) NULL判断字段是否为空...

    Oracle中分组后拼接分组字符串.pdf

    Oracle 中分组后拼接分组字符串 本文主要介绍了在 Oracle 中如何对分组后的数据进行拼接操作,生成分组字符串。下面将对这个问题进行详细的分析和解释。 首先,我们需要创建一个测试表,并插入一些测试数据。这个...

Global site tag (gtag.js) - Google Analytics