ORACLE单行函数的详细说明及代码演示 二.数值函数 三. 转换函数

此文转载自:https://blog.csdn.net/weixin_50296887/article/details/111941604

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中演示以上代码。