1、单行函数分类:一行记录,返回一个结果;
1)字符函数
注意:与mysql中函数用法不同的地方,我都用红色进行了标注。
大小写转换函数
-- 大写转小写函数 SQL> select lower('AbC') from dual; LOWER('ABC') ------------ abc SQL> select upper('abc') from dual; UPPER('ABC') ------------ ABC SQL> select initcap('aBc') from dual; INITCAP('ABC') -------------- Abc
字符串处理函数
① concat(str1,str2):用于进行两个字符串的拼接。
与mysql中用法不太一样,mysql中的concat函数可以拼接多个字符串。
-- concat函数:这个与mysql中不太一样,mysql中concat函数可以连接多个字符串; -- oracle中的concat函数只能连接两个字符串,||可以连接多个字符串; SQL> select concat('齐天大圣','孙悟空') from dual; CONCAT('齐天大圣','孙悟空') --------------------------- 齐天大圣孙悟空 SQL> select concat('齐天大圣','_','孙悟空') from dual; select concat('齐天大圣','_','孙悟空') from dual ORA-00909: 参数个数无效 SQL> select '齐天大圣'||'_'||'孙悟空' from dual; '齐天大圣'||'_'||'孙悟空' ------------------------- 齐天大圣_孙悟空
② substr(str,start,[len]):从start位置开始截取字符串,len表示要截取的长度。
没有指定len长度:表示从start开始起,截取到字符串末尾。
指定了len长度:表示从start开始起,截取len个长度。
字符串的截取索引下标,从1开始。
SQL> select substr('杨过爱上了小龙女',3) from dual; SUBSTR('杨过爱上了小龙女',3) ---------------------------- 爱上了小龙女 SQL> select substr('杨过爱上了小龙女',6,3) from dual; SUBSTR('杨过爱上了小龙女',6,3) ------------------------------ 小龙女
③ length(str):获取字符串的字符个数。
与mysql中用法不太一样,mysql中的length函数表示获取的是字符串的字节个数。如果还是不太懂,可以下去查一下“字符”与“字节”的区别。
SQL> select length('abc') from dual; LENGTH('ABC') ------------- 3 SQL> select length('abc中国') from dual; LENGTH('ABC中国') ----------------- 5 SQL> select length('abc-_-中国') from dual; LENGTH('ABC-_-中国') -------------------- 8
④ instr(str,要查找的子串):返回子串第一次出现的索引,如果找不到,返回0;找到了返回该字串第一次出现的位置索引。
SQL> select instr('杨过爱上了小龙女','小龙女') from dual; INSTR('杨过爱上了小龙女','小龙 ------------------------------ 6 SQL> select instr('杨过爱上了小龙女','小龙人') from dual; INSTR('杨过爱上了小龙女','小龙 ------------------------------ 0 SQL> select instr('a爱上了aline','a') from dual; INSTR('A爱上了ALINE','A') ------------------------- 1
⑤ lpad(str,len,填充字符):用指定的字符,实现对字符串左填充指定长度(以“字节”计算字符串)。
⑥ rpad(str,len,填充字符):用指定的字符,实现对字符串右填充指定长度(以“字节”计算字符串)。
与mysql中用法不太一样,mysql中的lpad/rpad函数表示以“字符”计算字符串。
SQL> select lpad('倚天屠龙记',20,'@') "lpad左填充" from dual; lpad左填充 ------------------------- @@@@@@@@@@倚天屠龙记 SQL> select rpad('倚天屠龙记',20,'#') "lpad左填充" from dual; lpad左填充 ------------------------- 倚天屠龙记########## SQL> select lpad('aaaaa',10,'*') "lpad左填充",rpad('aaaaa',10,'*') "rpad右填充" from dual; lpad左填充 rpad右填充 SQL> select lpad('倚天屠龙记',10,'*') "lpad左填充" from dual; lpad左填充 --------------- 倚天屠龙记 SQL> select rpad('倚天屠龙记',10,'*') "rpad右填充" from dual; rpad右填充 --------------- 倚天屠龙记 ---------- ----------
下面列出mysql中lpad和rpad的用法,仔细体会差别:
⑥ trim(str):去掉字符串前后的空格(不能去掉字符串中间的空格)。
-- 没有去掉空格以前,计算一下该字符串的长度;
SQL> select length(' 哈哈 哈 ') from dual; LENGTH('哈哈哈') ---------------- 7 -- 使用trim函数,去掉字符串前后的空格; SQL> select trim(' 哈哈 哈 ') from dual; TRIM('哈哈哈') -------------- 哈哈 哈 -- 计算去掉字符串前后的空格后,该字符串的长度; SQL> select length(trim(' 哈哈 哈 ')) from dual; LENGTH(TRIM('哈哈哈')) ---------------------- 4
⑦ replace(str,子串,另一个字符串):将字符串str中的字串,替换为另一个字符串。
SQL> select substr('18455683467',5,4) from dual; SUBSTR('18455683467',5,4) ------------------------- 5683 SQL> select replace('18455683467',substr('18455683467',5,4),'****') from dual; REPLACE('18455683467',SUBSTR(' ------------------------------ 1845****467 SQL> select replace('张无忌爱上了周芷若','周芷若','赵敏') from dual; REPLACE('张无忌爱上了周芷若',' ------------------------------ 张无忌爱上了赵敏