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