在Oracle,SQL Srever ,Mysql等主流数据库中最常用的字符串函数:
一.substr函数:
取得字符串中指定起始位置和长度的字符串默认是从起始位置到结束的子串。
substr( string,start_position,[length]) substr('目标字符串',开始位置,长度)
如:
substr('This is a test', 6, 2) would return 'is'
substr('This is a test', 6) would return 'is a test'
substr('TechOnTheNet', -3, 3) would return 'Net'
substr('TechOnTheNet', -6, 3) would return 'The'select substr('Thisisatest', -4, 2) value from dual
注意:开始位置(strat——postion)为负数时,将从右向左数。
二.replace函数
用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
1、语法
REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
2、参数
'string_expression1':待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据。
'string_expression2':待查找的字符串表达式。string_expression2 可以是字符数据或二进制数据。
'string_expression3':替换用的字符串表达式。string_expression3 可以是字符数据或二进制数据。
3、返回类型
如果 string_expression(1、2 或 3)是支持的字符数据类型之一,则返回字符数据。如果 string_expression(1、2 或 3)是支持的 binary 数据类型之一,则返回二进制数据。
示例:
下例用 xxx 替换 abcdefghi 中的字符串 cde。
SELECT REPLACE('abcdefghicde','cde','xxx') GO
下面是结果集:
------------ abxxxfghixxx (1 row(s) affected)
三.instr函数:
可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。返回值为:查找到的字符串的位置
如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。
对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:
SQL> select instr('yuechaotianyuechao','ao') position from dual;
注意:
1.若找不到出现位置时返回结果为0,
2.这里只有三个参数,意思是查找第一个要查找字符的位置(因为 ‘第几次出现’默认为1),如果‘起始位置’大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……
(但是也是以第一个字符开始计数)
四.oracle中length()与lengthb()函数:
SQL> select length('阿猪') from dual;
LENGTH('阿猪')
--------------
2
SQL> select lengthb('阿猪') from dual;
LENGTHB('阿猪')
---------------
4
区别:length求得是字符长度,lengthb求得是字节长度。
length返回的是字符数
lengthb返回的是字节数
五.tranlste函数的用法:
translate(string,from_str,to_str)
执行时,translate依次检查string中的每个字符是否在from_str中存在,如果不存在,那么这个string中的字符直接返回,如果存在,translate会记下这个字符在from_str中的位置,然后用to_str的同样位置的字符代替string中的这个字符作业返回结果。
举例如下:
SQL> select translate('ac','ab2','00') from dual;
结果:0c
分析结果如下:a在ab2中进行查找,位置是1,返回00中第一个字符0,然后c在ab2中进行查询,不存在则直接返回c, 所以结果是0c,这是最简单的,更个有空格或长度不一样的!
1.如果from_str可以比to_str长,也就是from_str的字符数目可以比to_str多,在from_str中多出来的字符称为"额外字符",也就是from_str中的位置在to_str中找不到的,比如
SQL> select translate('ac1','abc123','abc') from dual;
结果:ac
2.这里from_str中的1的位置是4,但是to_str的总长度是3,没有4,所以在from_STR中的123都是额外字符
如果string中的字符在from_str的额外中出现,那么string中这些字符将在返回时被删除,所以1虽然在abc123
中出现,但是abc中不存在第四个字符,所以删除返回值,结果为ac
注意:to_str不能是NULL或者'',否则会返回空值,translate也不能用于CLOB,再说得简单一点,也就是
1、如果string中的字符如果在from_string中没有,那么返回时被保留
2、如果string中的字符是from_string中的"额外字符",那么返回时被删除
3、如果string中的字符在from_string中找到,且在to_string中有相应位置的字符,那么返回时用to_string中的字符替换string中的字符
六.replace函数
用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。
1、语法
REPLACE ( 'string_expression1' , 'string_expression2' , 'string_expression3' )
2、参数
'string_expression1':待搜索的字符串表达式。string_expression1 可以是字符数据或二进制数据。
'string_expression2':待查找的字符串表达式。string_expression2 可以是字符数据或二进制数据。
'string_expression3':替换用的字符串表达式。string_expression3 可以是字符数据或二进制数据。
3、返回类型
如果 string_expression(1、2 或 3)是支持的字符数据类型之一,则返回字符数据。如果 string_expression(1、2 或 3)是支持的 binary 数据类型之一,则返回二进制数据。
示例:
下例用 xxx 替换 abcdefghi 中的字符串 cde。
SELECT REPLACE('abcdefghicde','cde','xxx') GO
下面是结果集:
------------ abxxxfghixxx (1 row(s) affected)
七.空格函数:
普通的空格:
前后的空格,使用LTrim和RTrim即可,例如:LTrim(RTrim(Name))
中间的空格,使用replace函数替换,例如:Replace(Name,' ','')
如果是普通的空格,很容易替换,但有时候会遇到一些特殊的空格,就比较麻烦,看起来跟普通的空格一模一样,但就是无法替换掉。这就需要特殊的方法去找出空格,然后用replace替换。
找出这样的空格,需要用到ascii函数,通过ascii函数,找出空格的ascii值,然后用replace函数+char函数来替换。
例如通过ascii函数,找到空格的ascii值为9,则使用replace(Name,char(9),'')来替换。
按照上面的方式,无非就是怎么找出空格的ascii值。
假设Name有个值是“张三 ”,后面有个特殊的空格。
select ascii(replace(name,'张三','') from 表名 where id=**
把Name的值取出,然后替换掉文本部分,剩下的就是特殊的那个空格,就能通过ascii函数来获取这个空格ascii值。