NLSCASE INSENSITIVE 数据库中的大小写转换函数

指定了 UPPERLOWER 大小写转换函数来支持在区分大小写的数据库中的区分大小写查询。在有 NLSCASE INSENSITIVE 属性的数据库中不经常需要他们,因为无需调用这些函数,NCHAR 和 NVARCHAR 数据类型就支持区分大小写的查询。您可在 NLSCASE INSENSITIVE 数据库中调用大小写转换函数,它们对 CHAR、LVARCHAR 和 VARCHAR 数据类型的影响与在区分大小写的数据库中相同。

在以 NLSCASE INSENSITIVE 选项创建的数据库中,数据库服务器不理会 NCHAR 和 NVARCHAR 值的字母大小写。调用大小写转换函数的表达式可返回的结果可与区分大小写的数据库会返回的不同,如果该表达式引用 NCHAR 或 NVARCHAR 对象,或如果数据库服务器以显式的或隐式的强制转型将该表达式求值为 NCHAR 或 NVARCHAR 数据类型的话。

当在带有 NLSCASE INSENSITIVE 属性的数据库中使用 UPPERLOWERINITCAP 函数对字符串表达式求值时,数据库服务器调用该函数,并对它的返回值应用数据类型提升规则,在主题 来自 CONCAT 和字符串函数的返回类型 中总结该规则。
下列示例说明在 NLSCASE INSENSITIVE 数据库中的此行为,其中表 t1 有这五个内建的字符数据类型的字符列。该表存储三行,其中每一列存储 3 个字母字符串的相同大小写的形式:
        CREATE DATABASE db NLSCASE INSENSITIVE;
        CREATE TABLE t1 (
        c1 NCHAR(20), 
        c2 NVARCHAR(20), 
        c4 VARCHAR(20),  
        c5 LVARCHAR(20)) ;
        INSERT INTO t1 values ('ibm', 'ibm', 'ibm', 'ibm', 'ibm');
        INSERT INTO t1 values ('Ibm', 'Ibm', 'Ibm', 'Ibm', 'Ibm');
        INSERT INTO t1 values ('IBM', 'IBM', 'IBM', 'IBM', 'IBM');

在下列示例中,数据库服务器将 UPPER 函数应用到 NCHAR 列 c1,然后对于 'IBM' 字符串常量相匹配的列中返回的所有值应用区分大小写的规则。

SELECT c1 FROM t1 WHERE UPPER(c1) = 'IBM';
由于在此数据库中 NCHAR 值时不区分大小写的,因此该查询从表中的每行返回列 c1 值,由于在每一行中字母的序列与字符串常量相匹配,使用忽略该列值的字母大小写的不区分大小写的规则:
c1
        
        ibm
        Ibm
        IBM
在相同的表上,通过对同一查询的下列修改,也会返回相同的结果集(即 'ibm''Ibm''IBM'):