2012年7月27日星期五

Oracle 11g Release 1 (11.1) 函数——NLS 字符函数和返回数字值的字符函数

Oracle 11g Release 1 (11.1) 函数——NLS 字符函数和返回数字值的字符函数

http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm#autoId2

 

本文内容

  • NLS 字符函数
  • 返回数字值的字符函数

 

Oracle 字符函数包括:

  • 返回字符值的字符函数
  • NLS 字符函数
  • 返回数字值的字符函数

 

NLS 字符函数

NLS 字符函数返回关于字符集的信息。NLS 字符函数包括:

  • NLS_CHARSET_ID
  • NLS_CHARSET_DECL_LEN
  • NLS_CHARSET_NAME
NLS_CHARSET_ID(string)

NLS_CHARSET_ID 函数返回字符集对应的 ID。string 参数是 VARCHAR2 值。'CHAR_CS' 的 string 值返回服务器数据库字符集 ID。'NCHAR_CS' 的 string 值返回服务器国际化字符集 ID。
无效字符集返回 null。

示例 1:演示 NLS_CHARSET_ID。

SQL> SELECT NLS_CHARSET_ID('ja16euc') FROM DUAL;
 
NLS_CHARSET_ID('JA16EUC')
-------------------------
                      830
 
SQL>

 

NLS_CHARSET_DECL_LEN(byte_count,'char_set_id')

NLS_CHARSET_DECL_LEN 函数返回一个 NCHAR 列的声明长度(也就是字符个数)。byte_count 参数是列的宽度。'char_set_id' 参数是字符集 ID。

示例 2:演示 NLS_CHARSET_DECL_LEN。当使用多字节字符集时,返回 200 个字节列的字符个数。

SQL> SELECT NLS_CHARSET_DECL_LEN(200, NLS_CHARSET_ID('ja16eucfixed')) as a
  2  FROM DUAL;
 
NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
                                                     100
 
SQL>

 

NLS_CHARSET_NAME(number)

NLS_CHARSET_NAME 函数返回字符集 ID 对应的字符集名称。字符集名称作为 VARCHAR2 值以数据库字符集返回。

若数字无法识别为字符集的 ID,则返回 null。

示例 3:演示 NLS_CHARSET_NAME。

SQL> SELECT NLS_CHARSET_NAME(2) FROM DUAL;
 
NLS_CH
------
WE8DEC
 
SQL>

 

返回数字值的字符函数

返回数字值的函数可以把任何字符类型作为其参数。它包括:

  • ASCII
  • INSTR
  • LENGTH
  • REGEXP_INSTR
ASCII(char)

ASCII 函数返回 char 第一个字符的数据库字符集的十进制表示。
char 可以是数据类型 CHAR、VARCHAR2、NCHAR 或 NVARCHAR2。返回值是 NUMBER 类型。若你的数据库字符集是 7 位 ASCII ,则该函数返回 ASCII 值;若数据库字符集是 EBCDIC 编码,则返回一个 EBCDIC 值。另外,没有相应的 EBCDIC 字符函数。
该函数不直接支持 CLOB 数据。但是,CLOB 数据可以隐式数据转换作为参数传递。

示例 4:演示 ASCII。返回 employees 表中字段 last names 以字母 L 开头的记录,L 的 ASCII 等价于 76。employees 表位于 Oracle OE schema。

SQL> SELECT last_name FROM employees WHERE ASCII(SUBSTR(last_name, 1, 1)) = 76;
 
LAST_NAME
-------------------------
Lorentz
Landry
Ladwig
Lee
Livingston
 
SQL>

 

INSTR(string,substring)
INSTR(string,substring,position)
INSTR(string,substring,position,occurrence)
INSTRB(string,substring)
INSTRB(string,substring,position)
INSTRB(string,substring,position,occurrence)
INSTRC(string,substring)
INSTRC(string,substring,position)
INSTRC(string,substring,position,occurrence)
INSTR2(string,substring)
INSTR2(string,substring,position)
INSTR2(string,substring,position,occurrence)
INSTR4(string,substring)
INSTR4(string,substring,position)
INSTR4(string,substring,position,occurrence)
REGEXP_INSTR(source_char,pattern)
REGEXP_INSTR(source_char,pattern,position)
REGEXP_INSTR(source_char,pattern,position,occurence)
REGEXP_INSTR(source_char,pattern,position,occurence,return_opt)
REGEXP_INSTR(source_char,pattern,position,occurence,return_opt,match_param)
REGEXP_INSTR(source_char,pattern,position,occurence,return_opt,match_param,subexpr)

INSTR 函数在 string 中检索 substring。该函数返回一个整数,指示 substring 在 string 中第一个匹配的位置。INSTR 利用由输入字符集自定义的字符计算字符串。INSTRB 使用字节,而不是字符。INSTRC 使用 Unicode 完整字符(Unicode complete characters)。INSTR2 使用 UCS2 编码点(UCS2 code points)。INSTR4 使用 UCS4 编码点(UCS4 code points)。

  • position 是非零整数,指示 Oracle 数据库检索 string 中字符的开始位置。若 position 为负数,则 Oracle 从 string 末尾向后开始计算,并检索。
  • occurrence 是整数,指示 Oracle 检索如何发生。occurrence 必须为正数。若 occurrence 大于 1,则数据库在 string 的第 occurrence 次检索到时返回。

string 和 substring 可以是任意数据类型 CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB 或 NCLOB。返回值为 NUMBER 数据类型。

position 和 occurrence 必须是 NUMBER 类型,或是任何可以隐式转换成 NUMBER 的数据类型,并必须解析为整数。position 和 occurrence 的默认值为 1,意味着,Oracle 从 string 第一个字符开始检索,substring 第一次检索到时发生。返回值时相对于 string 的开始位置,而不是相对于 position。若检索不成功,则返回 0。

REGEXP_INSTR 函数是 INSTR 函数关于正则表达式的扩展函数。

示例 5:演示 INSTR。

SQL> SELECT INSTR('CORPORATE FLOOR', 'OR') "Instring1",
  2         INSTR('CORPORATE FLOOR', 'OR', 3, 2) "Instring2",
  3         INSTR('CORPORATE FLOOR', 'OR', -3, 2) "ReversedInstring"
  4    FROM DUAL;
 
 Instring1  Instring2 ReversedInstring
---------- ---------- ----------------
         2         14                2
 
SQL>

 

LENGTH(char)
LENGTHB(char)
LENGTHC(char)
LENGTH2(char)
LENGTH4(char)


LENGTH 函数返回 char 的长度。该函数利用由输入字符集定义字符的长度。LENGTHB 使用字节,而不是字符。LENGTHC 使用 Unicode 完整字符(Unicode complete characters)。LENGTH2 使用 UCS2 编码点(UCS2 code points)。LENGTH4 使用 UCS4 编码点(UCS4 code points)。

char 可以是 CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB 或 NCLOB 的任意类型。返回值是 NUMBER 类型。若 char 是 CHAR 类型,则长度包括所有空白。若 char 是 null,则返回 null。

LENGTHB 函数的限制:该函数仅支持单字节的 LOB。不能用在多字节字符节的 CLOB 和 NCLOB 数据上。

示例 6:演示 LENGTH。

SQL> SELECT LENGTH('CANDIDE') "Length in charactoers"
  2  FROM DUAL;
 
Length in charactoers
---------------------
                    7
 
SQL>


TAG: