在Oracle几乎全部使用varchar2类型存储字符数据,故本文只用于介绍varchar2类型相关的知识点。
- 我们在声明varchar2类型的变量或数据库表字段时,需要指定该变量或字段存储的最大的字符长度。该字符长度有两种定义方式。
- A varchar(100 CHAR)
- A varchar(100 BYTE)
第一个定义表示最多容纳100个字符,第二个定义表示最多容纳100个字节。而我们平时一般使用如下方式定义varchar2类型数据:
- A varchar2(100)
那么采用这种默认方式,究竟是最多100个字符还是100个字节取决于查询
select value from nls_session_parameters where parameter='NLS_LENGTH_SEMANTICS'
返回值为CHAR还是BYTE。
- 函数CHR和ASCII
函数CHR用于将ASCII码转化为对应的字符,ASCII函数恰巧相反用于将字符转化为ASCII码
select chr(10) from dual;--返回换行符
select ascii('A') from dual;--返回A对应的ASCII码
- 函数INITCAP会将单词的首字母变为大写,其余为小写
select initcap('carMen sAParado') from dual;--返回Carmen Saparado
- instr和substr函数分别用于检索字符串位置和提取指定位置处的字符。需要注意传入起始位置处参数为负值的情况,对于substr函数而言,如:
substr(‘helloworld’,-5)
表示从右数第五个字符开始提取,故结果为world
对于instr而言,则情况有些特殊,看如下的例子:
- instr(‘carmen feng’,‘en’,-3,1)->返回值为9,为feng包含的en索引位置
oracle执行上述函数调用,首先检查右数第三个字符之后的字符是否是我们检索的字符,如’en’,如果是则此为第一次匹配成功的字符串,然后从右数第三个字符开始,按照从右往左,匹配检索的字符。
- LPAD,RPAD分别用于从左和右填充字符串使其保证长度固定
select lpad('aaaa',8,'b') from dual;--表示从左边开始填充字符串直到字符串长度等于8,故该语句执行结果为bbbbaaaa
如果遇到字符串的长度大于函数传入的填充后字符串长度参数,则会截取原有字符串,使其字符串长度等于给定的填充后字符串长度参数。
select lpad('abcd',3,'e') from dual;--执行结果为abc
- LTRIM,RTRIM分别用于剪切字符串左边开始的和右边开始的,给定字符集中的字符。
select ltrim('afgefgehf','afbe') from dual;--执行该语句会去掉左边开始的字符集中的字符,结果为gefgehf
- 字符串中正则表达式用法,参考我的另一篇博文Oracle中与正则表达式相关的函数介绍