Oracle 单行函数

单行函数

单行函数就是完成某一具体功能的操作函数。
单行函数的格式:返回值 函数名称(参数)
字符串函数,数值函数,日期函数,转换函数,通用函数

1.字符串函数

NO 函数名称 描述
1 字符串 UPPER(列or字符串) 将传入的字符串变成大写
2 字符串LOWER(列or字符串) 将传入的字符串变成小写
3 字符串INITCAP(列or字符串) 开头首字母大写,其他字母小写
4 数字 LENGTH(列or字符串) 取得字符串长度
5 字符串 SUBSTR(列or字符串,开始索引,[索引长度]) 进行字符串的截取,如果没有设置长度,表示从开始索引
6 字符串 REPLACE(列or字符串,旧内容,新内容) 将指定的字符串的新数据替换旧数据

在Oracle里面,所有的函数如果想要进行验证,也必须编写SQL语句,为了方便,专门提供了dual的虚拟表。
1.转大写,转小写操作。

范例:观察基本操作。

SELECT UPPER('hello') FROM dual;

范例:将所有的姓名转小写

SELECT LOWER(ename) FROM emp;

在orancl中本身数据是区分大小写的,提供这两个函数是为了有很多代码本身是不区分大小的,所以用户进行信息查询的时候也往往不会考虑到大小写问题。

范例:由用户输入要查询的雇员姓名,而后显示雇员的完整信息。

  • 在Oracle里面如果要实现数据的输入操作,可以使用替代变量的方式。
SELECT * FROM EMP WHERE ename=UPPER('&inputname')

2.字符串截取
从指定位置截取到结尾,字符串SUBSTR(列|字符串,开始索引);
截取部分内容:字符串SUBSTR(列|字符串,开始索引,长度)

范例:验证函数

SELECT SUBSTR ('helloworld',6) FROM dual;

注:在程序中所有的字符串首字母的索引都是0,但是在Oracle里面,所有的字符串的是首字母的索引都是1,如果设置的是0,也会按照1的标准来。

范例:要求截取每个雇员的前三个字母:

SELECT ename SUBSTR(ename,1,3) FROM EMP

2. 日期和时间处理函数

示例:筛选入职日期为1981年的雇员的信息

SELECT *	
FROM EMP
WHERE to_number(to_char(HIREDATE,'YYYY'))=1981;

在这个例子里,to_char()函数用来提取日期的成分,to_number()用来将提取出出来的成分转换为数值,以便能和2012比较

完成这一操作的另一操作是BETWEEN AND操作。

SELECT *
FROM EMP
WHERE HIREDATE BETWEEN to_date('01-MAY-81') AND to_date('01-MAY-82');

因为orancl的环境是英语,所以默认的日期格式为 DD - MON -YY

3.数值处理函数

数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算

函数 说明
ABS() 返回一个数的绝对值
COS() 返回一个数的余弦
EXP() 返回一个数的指数值
PI() 返回圆周率
SIN() 返回一个数的正弦
SQRT() 返回一个数的平方根
TAN() 返回一个数的正切
ROUND() 实现数据的四舍五入,可以设置保留小数位
TRUNC() 实现数据的去小数功能
MOD() 求模(计算余数)

4.日期函数

函数名称 描述
日期 ADD_MONTHS(列日期,月数) 在指定月份上增加月份
数字 MONTHS_BETWEEN(列日期,列日期) 返回两个日期之间的月份个数
日期 LAST_DAY(列日期) 取得指定日期所在月份
日期 NEXT_DAY(列日期,星期X) 返回下一个指定星期的具体时间

示例:
要求以日,月,年的方式计算出每个雇员到现在为止雇佣年限。
第一步,求出每一个雇员到现在雇佣的年份

SELECT EMPNO,ENAME,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate)/12) YEAR  
FROM EMP;

第二步,求出雇佣的月份。

TRUNC(MOD(MONTHS_BETWEEN(SYSDATE,hiredate),12)) month,

第三步,求出雇佣的日期。

TRUNC(SYSDATE-(ADD_MONTHS(hiredate,TRUNC(MONTHS_BETWEEN(SYSDATE,hiredate))))) DAY

5 . 转换函数。

函数名称 描述
字符串TO_CHAR(列,数字,日期,跟上转换格式) 将日期或者数字格式化为指定结构的字符串
日期 TO_DATE(列,字符串,跟上转换格式) 按照指定的转换格式编写字符串后将其变换为日期形式
数字 TO_NUMBER(列字符串) 将字符串变为数字

1.转字符串函数:TO_CHAR()
如果想要将一个日期或者数字变成一个字符串,首先要清楚转换格式的标记

  • 日期:年(yyyy)、月(mm)、日(dd)
  • 时间:时(hh、hh24),分(mi),秒(ss)
  • 数字:任意数字(9),本地货币符号(L)

范例:将日期显示格式化

select TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual;

范例:格式化日期时间

select TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') as DAY FROM dual;
--24表示二十四小时制

最屌的功能:可以实现日期数据的拆分。
范例:要求查询所有在二月份雇佣的雇员

SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'mm'=02);

格式化数字:

SELECT TO_CHAR(123189468945613,'L999,999,999,999,999,999,999') FROM dual;

2.转日期函数
范例:将字符串变为日期:

SELECT TO_DATE('1889-10-18','yyyy-mm-dd') FROM dual;

3.转数字函数
范例:

SELECT TO_NUMBER('1')+TO_NUMBER('2') FROM dual;

但是Oracle已经默认提供了许多自动转换机制,所以意义不大

6.通用函数

一般指Oracle特色函数,主要有两个

函数名称 描述
数字NVL(列/NULL,默认值) 如果传入的内容是NULL,则使用默认数值处理,如果不是空则使用原始数值
数据类型DECODE(列/字符串/数值,比较内容1,显示内容1,比较内容2,显示内容2…【默认显示内容】) 设置的内容会与每一个比较内容相比较,如果内容相同,则会使用显示内容进行输出,如果都不相同,则使用最后的默认内容进行输出

1.处理NULL函数
范例:要求查询出每个雇员的编码,姓名,基本工资,佣金,年薪
当佣金为NULL时,不论进行何种计算,结果都是NULL,所以在这里使用函数NVL函数

select empno,ename,sal,comm,(sal+nvl(comm,0))*12 from emp;

2.decode()函数
decode()函数类似于程序的if … else 但是只能判断内容是否相同,进行比较。
范例 将所有的职位信息替换为中文显示

SELECT ename,job,DECODE(job,'CLERK','办事员','SALESMAN','销售','...') FROM emp;

猜你喜欢

转载自blog.csdn.net/qq_42785117/article/details/83315496