ORACLE单行函数的详细说明及代码演示
SQL语言中,常用的是数据库软件ORACLE,而在ORACLE中,有一些常用的单行函数,即操作一行数据,返回一个结果。
一.字符函数
字符函数是专门用来处理字符串数据的函数,比较常用的有以下有些
首先,我们先假设有一张员工表,名为EMP
1.转码函数
ASCII(A) 返回字符X的ASCII码
SQL> SELECT ASCII('A'), ASCII(ENAME) FROM EMP;
2.拼接函数
CONCAT(A,B) 用来拼接字符串A和B
注意:此函数工作中常用
SQL>SELECT CONCAT(EMPNO, ENAME) 拼接 FROM EMP;
解释:EMP表中的EMPNO, ENAME字段无空格拼接在一起
3.计算长度函数
LENGTH(A) 返回A的长度
SQL>SELECT ENAME, LENGTH(ENAME) FROM EMP;
解释: LENGTH()用来计算EMP表中ENAME字段的长度
4.大小写转换函数
LOWER(A) 将A转换成小写
UPPER(a) 将a转换成大写
SQL>SELECT UPPER(ENAME) , LOWER(ENAME) FROM EMP;
解释:EMP表中ENAME字段分别被转换成大写和小写
5.首字母大写函数
INITCAP(A) 将A字段的首字母大写显示出来
SQL>SELECT INITCAP(ENAME) FROM EMP;
解释:EMP表中ENAME字段的首字母被转换成小写
6.替换函数
REPLACE(A,a,b)
说明:在A字段中查找小a,并将a替换成b
SQL>SELECT ENAME, REPLACE(ENAME, 'A', '00') 替换 FROM EMP;
解释:EMP表中ENAME字段包含A的都被替换成00
7.逐个替换函数
TRANSLATE(A,aa,bb)
说明:在A字段中查找小aa,并将aa替换成bb
SQL>SELECT ENAME, TRANSLATE(ENAME, 'ABCD', '1234') FROM EMP;
解释:EMP表中ENAME字段包含ABCD的被逐个替换成1234;
8.去空字符函数
TRIM(’ X ')
说明:把X的两边空格去掉
SQL>SELECT TRIM(' hnnbb ') FROM dual;
结果:hnnbb
LTRIM(X[,TRIM_STR])
说明:把X的左边截去trim_str字符串,缺省截去空格
SELECT lTRIM(’ hnnbb ') FROM dual;
SQL>SELECT LTRIM(' hnnbb ') FROM dual;
结果:hnnbb
解释:hnnbb左边的空格被去除掉了,但右边的空格还存在。
RTRIM(X[,TRIM_STR]) FROM dual;
说明:把X的右边截去trim_str字符串,缺省截去空格
SELECT RTRIM(’ hnnbb ') FROM dual;
SQL>SELECT RTRIM(' hnnbb ') FROM dual;
结果:hnnbb
解释:hnnbb右边的空格被去除掉了,但左边的空格还存在。
9.截取函数
SUBSTR(X,start,[length])
说明:返回X的字串,从start处开始,截取length个字符,缺省length,默认到结尾
SQL>SELECT ENAME, SUBSTR(ENAME, 0, 2) FROM EMP;
解释:第一个EMP表中ENAME字段的数据,第二个是起始位置,第三个是截取几个字符;
注意:oracle起始位置0和1 是一样的
SQL>SELECT ENAME, SUBSTR(ENAME, 3) FROM EMP ;
解释:截取EMP表中ENAME字段数据第3个位置之后所有字符
10.查找函数
INSTR(X,Y,1)
说明:从X中查找Y,从第一个位置开始查找
SQL>SELECT ENAME, INSTR(ENAME, 'T', 1) from EMP;
解释:EMP表中ENAME字段,从第个位置开始查找T。
INSTR(X,Y,1,n)
说明:从X中查找Y,从第一个位置开始查找,n表示第几次出现
SQL>SELECT ENAME, INSTR(ENAME, 'A', 1, 2) FROM EMP;
小练习
计算 ‘#121#3#4#56#78#90#’ 第三个#号 到第六个#之间的数据?
思路:
1.计算第三位置+1
2.计算第六位置
3.第六-第三=截取的长度-1
SQL>SELECT SUBSTR('#121#3#4#56#78#90#',
INSTR('#121#3#4#56#78#90#', '#', 1, 3) + 1,
INSTR('#121#3#4#56#78#90#', '#', 1, 6) -
INSTR('#121#3#4#56#78#90#', '#', 1, 3) - 1)
FROM DUAL;
结果:4#56#78
二.数值函数
数值函数有可以单独的用来计算一些数值,接受数字参数,也可以用以表中某些字段列的计算,还可以是一个数字表达式。
MOD(X,Y) | X除以Y的余数 |
---|---|
POWER(X,Y) | X的Y次幂 |
ROUND(X,Y) | X在第Y位四舍五入 |
ABS(X) | X的绝对值 |
SQRT(X) | X的平方根 |
POWER(X,Y) | X的Y次幂 |
TRUNC(X,Y) | 取整 |
FLOOR(X) | 小于或等于X的最大值 |
CEIL(X) | 小于或等于X的最小值 |
三. 转换函数
1.TO_NUMBER(A)
说明:将一串字符型数字转换成数字型
SQL>SELECT TO_NUMBER('1231') + 100 FROM DUAL;
结果:1131
若在ORACLE中直接用以下代码
SQL>SELECT '1231' + 100 FROM DUAL;
结果依旧是1131,因为ORACLE自动替你转换了。但是我们应该避免使用这样的方法计算,因为会导致索引失效;(索引我们理解为目录,加快查询速度)
2.TO_CHAR(a,[fmt])
把日期和数字转换为制定格式的字符串。其中,Fmt是格式化字符串
以下为代码演示,后面的中文为转换的格式注解
SQL>SELECT TO_CHAR(SYSDATE, 'yyyy') 年,
TO_CHAR(SYSDATE, 'mm') 月,
TO_CHAR(SYSDATE, 'dd') 天,
TO_CHAR(SYSDATE, 'day') 星期几,
TO_CHAR(SYSDATE, 'q') 季度,
TO_CHAR(SYSDATE, 'w') 当月第几周,
TO_CHAR(SYSDATE, 'ddd') 当年第几天,
TO_CHAR(SYSDATE, 'ww') 这一年的第几周,
TO_CHAR(SYSDATE, 'hh24') 时,
TO_CHAR(SYSDATE, 'mi') 分,
TO_CHAR(SYSDATE, 'ss') 秒,
TO_CHAR(SYSDATE, 'd') 本周第几天
FROM DUAL;
以上代码一般用于从日期里面提取详细数据使用,工作中非常常用!
3.TO_DATE(X,[fmt])
ci此函数用于将一个字符串以fmt格式转换成一个日期类型
提取日期小知识
不区分上下半年,提取某月,某月中的某天,某周
代码演示:
SQL>SELECT TRUNC(SYSDATE,'yyyy')年,TRUNC(SYSDATE,'mm')月,TRUNC(SYSDATE,'dd')天,TRUNC(SYSDATE,'day')周 FROM dual;
区分上下半年,提取某月,某月中的某天,某周
代码演示:
SQL>SELECT round(SYSDATE,'yyyy')年,round(SYSDATE,'mm')月,round(SYSDATE,'dd')天,round(SYSDATE,'day')周 FROM dual;
总结
这些单行的函数在是SQL语言中是非常基础的,但是我们要非常熟悉他们的应用。读者可自行在ORACLE中演示以上代码。