Oracle11G-SQL开发指南-4.1-字符函数
Oracle11G-SQL开发指南-4.1-字符函数。
******************************************************************************************************************
字符函数——返回字符值
这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.
除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.
字符函数的返回类型所受的限制和基本数据库类型所受的限制是相同的,比如: VARCHAR2数值被限制为2000字符(ORACLE 8中为4000字符),而CHAR数值被限制为255字符(在ORACLE8中是2000).
当在过程性语句中使用时,它们可以被赋值给VARCHAR2 或者CHAR类型的PL/SQL变量.
CHR:
语法: chr(x)
功能:返回在数据库字符集中与X拥有等价数值的字符。CHR和ASCII是一对反函数。经过CHR转换后的字符再经过ASCII转换又得到了原来的字符。
使用位置:过程性语句和SQL语句。
SELECT CHR(97) FROM dual; -- a
CONCAT
语法: CONCAT(string1,string2)
功能:返回string1,并且在后面连接string2。
使用位置:过程性语句和SQL语句。
INITCAP
语法:INITCAP(string)
功能:返回字符串的每个单词的第一个字母大写而单词中的其他字母小写的string。单词是用.空格或给字母数字字符进行分隔。不是字母的字符不变动。
将输入的字符串单词的首字母转换成大写。PS:如果不是两个字母连在一起,则认为是新的单词,例:a_b a,b a b 类似前面这些情况,都a和b都会转换成大写
使用位置:过程性语句和SQL语句。
LTRIM
语法:LTRIM(string1,string2)
功能:返回删除从左边算起出现在string2中的字符的string1。String2被缺省设置为单个的空格。数据库将扫描string1,从最左边开始。当遇到不在string2中的第一个字符,结果就被返回了。LTRIM的行为方式与RTRIM很相似。
使用位置:过程性语句和SQL语句。
NLS_INITCAP
语法:NLS_INITCAP(string[,nlsparams])
功能:返回字符串每个单词第一个字母大写而单词中的其他字母小写的string,
nlsparams指定了不同于该会话缺省值的不同排序序列。
如果不指定参数,则功能和INITCAP相同。
Nlsparams可以使用的形式是:‘NLS_SORT=sort’ 这里sort制订了一个语言排序序列。
使用位置:过程性语句和SQL语句。
LOWER(string) 将输入的字符串转换成小写
NLS_LOWER
语法:NLS_LOWER(string[,nlsparams])
功能:返回字符串中的所有字母都是小写形式的string。不是字母的字符不变。
Nlsparams参数的形式与用途和NLS_INITCAP中的nlsparams参数是相同的。
如果nlsparams没有被包含,那么NLS_LOWER所作的处理和LOWER相同。
使用位置;过程性语句和SQL语句。
UPPER
语法: UPPER(string)
功能: 返回大写的string.不是字母的字符不变.如果string是CHAR数据类型的,那么结果也是CHAR类型的.如果string是VARCHAR2类型的,那么结果也是VARCHAR2类型的.
使用位置: 过程性语句和SQL语句。
NLS_UPPER
语法:nls_upper(string[,nlsparams])
功能:返回字符串中的所有字母都是大写的形式的string。不是字母的字符不变。
nlsparams参数的形式与用途和NLS_INITCAP中的相同。如果没有设定参数,则NLS_UPPER功能和UPPER相同。
使用位置:过程性语句和SQL语句。
REPLACE
语法:REPLACE(string,search_str[,replace_str])
功能:把string中的所有的子字符串search_str用可选的replace_str替换,如果没有指定replace_str,所有的string中的子字符串search_str都将被删除。
REPLACE是TRANSLATE所提供的功能的一个子集。
使用位置:过程性语句和SQL语句。
RPAD
语法:RPAD(string1,x[,string2])
功能:返回在X 字符长度的位置上插入一个string2中的字符的string1。如果string2的长度要比X字符少,就按照需要进行复制。
如果string2多于 X字符,则仅string1前面的X各字符被使用。如果没有指定string2,那么使用空格进行填充。
X是使用显示长度可以比字符串的实际长度要长。 RPAD的行为方式与LPAD很相似,除了它是在右边而不是在左边进行填充。
使用位置:过程性语句和SQL语句。
RTRIM
语法: RTRIM(string1,[,string2])
功能: 返回删除从右边算起出现在string1中出现的字符string2. string2被缺省设置为单个的空格.
数据库将扫描string1,从右边开始.当遇到不在string2中的第一个字符,结果就被返回了RTRIM的行为方式与LTRIM很相似.
使用位置:过程性语句和SQL语句。
SOUNDEX
语法: SOUNDEX(string)
功能: 返回string的声音表示形式.这对于比较两个拼写不同但是发音类似的单词而言很有帮助.
使用位置:过程性语句和SQL语句。
SELECT SOUNDEX('a') FROM dual ; -- A000
SUBSTR 截取子串
语法: SUBSTR(string,a[,b])
功能: 返回从a位置开始的b个字符长的string的一个子字符串. 第一个字符的位置是1. 如果a是0,那么它就被认为从第一个字符开始.
如果是正数,返回字符是从左边向右边进行计算的.如果b是负数,那么返回的字符是从string的末尾开始从右向左进行计算的.
如果b不存在,那么它将缺省的设置为整个字符串.如果b小于1,那么将返回NULL.如果a或b使用了浮点数,那么该数值将在处理进行以前首先被却为一个整数.
使用位置:过程性语句和SQL语句。
TRANSLATE
语法: TRANSLATE(string,from_str,to_str)
功能: 返回将所出现的from_str 中的每个字符替换为to_str中的相应字符以后的string.
TRANSLATE是REPLACE所提供的功能的一个超集.如果from_str比to_str长,那么在from_str中而不在to_str中而外的字符将从string中被删除,因为它们没有相应的替换字符. to_str不能为空.Oracle把空字符串认为是NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL.
使用位置:过程性语句和SQL语句。
******************************************************************************************************************
字符函数——返回数字
这些函数接受字符参数回数字结果.参数可以是CHAR或者是VARCHAR2类型的.尽管实际下许多结果都是整数值,但是返回结果都是简单的NUMBER类型的,没有定义任何的精度或刻度范围.
ASCII
语法: ASCII(string)
功能: 数据库字符集返回string的第一个字节的十进制表示.请注意该函数仍然称作为ASCII.
尽管许多字符集不是7位ASCII.CHR和ASCII是互为相反的函数.CHR得到给定字符编码的响应字符. ASCII得到给定字符的字符编码.
使用位置: 过程性语句和SQL语句。
字符x要用单引号括起来,
不用单引号或使用双引号则报"错误 ORA-00904"
对于全角字符,ascii值的范围是\uFF00-\uFFFF
SELECT ASCII('a') FROM dual; -- 97
SELECT ASCII('abc') FROM dual; -- 97
SELECT ASCII('#') FROM dual; -- 35
SELECT ASCII('中') FROM dual; -- 54992
SELECT ASCII("abc") FROM dual; -- 错误 ORA-00904:"abc":标识符无效
INSTR
语法: INSTR(string1, string2[a,b])
功能: 得到在string1中包含string2的位置. string1时从左边开始检查的,开始的位置为a,如果a是一个负数,那么string1是从右边开始进行扫描的.第b次出现的位置将被返回.
a和b都缺省设置为1,这将会返回在string1中第一次出现string2的位置.如果string2在a和b的规定下没有找到,那么返回0.位置的计算是相对于string1的开始位置的,不管a和b的取值是多少.
使用位置: 过程性语句和SQL语句。
INSTRB
语法: INSTRB(string1, string2[a,[b]])
功能: 和INSTR相同,只是操作的对参数字符使用的位置的是字节.
使用位置: 过程性语句和SQL语句。
LENGTH
语法: LENGTH(string)
功能: 返回string的字节单位的长度.CHAR数值是填充空格类型的,如果string由数据类型CHAR,它的结尾的空格都被计算到字符串长度中间.如果string是NULL,返回结果是NULL,而不是0.
您不能对一个使用LONG数据类型的列使用LENGTH之类的函数。
使用位置: 过程性语句和SQL语句。
LENGTHB
语法: LENGTHB(string)
功能: 返回以字节为单位的string的长度.对于单字节字符集LENGTHB和LENGTH是一样的.
使用位置: 过程性语句和SQL语句。
NLSSORT
语法: NLSSORT(string[,nlsparams])
功能: 得到用于排序string的字符串字节.所有的数值都被转换为字节字符串,这样在不同数据库之间就保持了一致性. Nlsparams的作用和NLS_INITCAP中的相同.如果忽略参数,会话使用缺省排序.
使用位置: 过程性语句和SQL语句。
******************************************************************************************************************
连接符(||)
将两个字符串用||连接起来,除此之外还可以使用Concat函数来连接字符串。例:select CONCAT(City,country) from Table
******************************************************************************************************************
-- 验证是否包含汉字
create table test(a varchar2(10));
insert into test values('鸟');
insert into test values('深刻');
insert into test values('aaa');
insert into test values('bbb');
insert into test values('b鸟bb');
SELECT * FROM TEST;
-- 对于全角字符,ascii值的范围是\uFF00-\uFFFF
select a, asciistr(a) from test where asciistr(a) like '%\%'; -- 结果是有汉字的
select a ,asciistr(a) from test where asciistr(a) not like '%\%'; -- 结果是不包含汉字的
-- length求得是字符长度,lengthb求得是字节长度,汉字是多字节字符
select a, length(a) , lengthb(a) from TEST where length(a) != lengthb(a) ; --结果是有汉字的
上一篇: [C++::STL]之map的用法
下一篇: C语言程序运行时间(15)