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 可以是数据类型 CHARVARCHAR2NCHARNVARCHAR2。返回值是 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。该函数返回一个整数,指示 substringstring 中第一个匹配的位置。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 次检索到时返回。

stringsubstring 可以是任意数据类型 CHARVARCHAR2NCHARNVARCHAR2CLOBNCLOB。返回值为 NUMBER 数据类型。

positionoccurrence 必须是 NUMBER 类型,或是任何可以隐式转换成 NUMBER 的数据类型,并必须解析为整数。positionoccurrence 的默认值为 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 可以是 CHARVARCHAR2NCHARNVARCHAR2CLOBNCLOB 的任意类型。返回值是 NUMBER 类型。若 charCHAR 类型,则长度包括所有空白。若 charnull,则返回 null

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

示例 6:演示 LENGTH。

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


TAG: