Oracle 之 单行函数

单行函数

操作数据对象

接受参数返回一个结果

只对一行进行变换

每行返回一个结果

可以转换数据类型

可以嵌套

参数可以是一列或一个值

1.字符控制函数

这类函数改变字符的大小写

函数结果

LOWER('SQL Course')

sql course

UPPER('SQL Course')

SQL COURSE

INITCAP('SQL Course')

Sql Course

 

SELECT employee_id, last_name, department_id
FROM   employees
WHERE  LOWER(last_name) = 'higgins';

2.字符控制函数

这类函数控制字符:

函数

结果

CONCAT('Hello', 'World')

HelloWorld

SUBSTR('HelloWorld',1,5)

Hello

LENGTH('HelloWorld')

10

INSTR('HelloWorld', 'W')

6

LPAD(salary,10,'*')

*****24000

RPAD(salary, 10, '*')

24000*****

TRIM('H' FROM 'HelloWorld')

elloWorld

REPLACE(‘abcd’,’b’,’m’)

amcd

例如:

SELECT employee_id, CONCAT(first_name, last_name) NAME, 
       job_id, LENGTH (last_name), 
       INSTR(last_name, 'a') "Contains 'a'?"
FROM   employees
WHERE  SUBSTR(job_id, 4) = 'REP';

 

3.数字函数

ROUND: 四舍五入

ROUND(45.926, 2)   ---->   45.93

TRUNC:  截断

TRUNC(45.926, 2)  ---->    45.92

MOD: 求余

MOD(1600, 300)   --->   100

SELECT ROUND(45.923,2), ROUND(45.923,0),
       ROUND(45.923,-1)
FROM   DUAL;

DUAL 是一个‘伪表’,可以用来测试函数和表达式

SELECT  TRUNC(45.923,2), TRUNC(45.923),
        TRUNC(45.923,-2)
FROM   DUAL;
SELECT last_name, salary, MOD(salary, 5000)
FROM   employees
WHERE  job_id = 'SA_REP';

 

4.日期

Oracle 中的日期型数据实际含有两个值: 日期和时间。

函数SYSDATE 返回: 日期  时间

在日期上加上或减去一个数字结果仍为日期。

两个日期相减返回日期之间相差的天数

日期不允许做加法运算,无意义

可以用数字除24来向日期中加上或减去天数。

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM   employees
WHERE  department_id = 90;

函数

描述

MONTHS_BETWEEN

两个日期相差的月数

ADD_MONTHS

向指定日期中加上若干月数

NEXT_DAY

指定日期的下一个星期 * 对应的日期

LAST_DAY

本月的最后一天

ROUND日期四舍五入
TRUNC

日期截断

 

5.转换函数

5.1 TO_CHAR函数对日期的转换

必须包含在单引号中而且大小写敏感

可以包含任意的有效的日期格式

日期之间用逗号隔开

SELECT TO_CHAR(sysdate,‘yyyy-mm-dd hh:mi:ss’) FROM dual;
SELECT last_name,
       TO_CHAR(hire_date, 'DD Month YYYY')
       AS HIREDATE
FROM   employees;
select employee_id,last_name,hire_date
from employees
where to_char(hire_date,’yyyy-mm-dd’) = ‘1987-09-17’

5.2 TO_CHAR函数对数字的转换

SELECT TO_CHAR(salary, '$99,999.00') SALARY
FROM   employees
WHERE  last_name = 'Ernst';

 

5.3 TO_DATE 函数对字符的转换

使用 TO_DATE 函数将字符转换成数字

TO_DATE('2012年10月29日 08:10:21','yyyy"年"mm"月"dd"日"hh:mi:ss')
From dual

 

5.4 TO_NUMBER函数对字符的转换

TO_NUMBER(‘¥1,234,567,890.00’,’L999,999,999,999.99’)
from dual

 

6.通用函数

这些函数适用于任何数据类型,同时也适用于空值

NVL (expr1, expr2)

NVL2 (expr1, expr2, expr3)

NULLIF (expr1, expr2)

COALESCE (expr1, expr2, ..., exprn)

6.1 NVL

将空值转换成一个已知的值:(也就是给了一个默认值)

可以使用的数据类型有日期、字符、数字。

函数的一般形式:

NVL(commission_pct,0)

NVL(hire_date,'01-JAN-97')

NVL(job_id,'No Job Yet')

 

6.2 NVL2

NVL2 (expr1, expr2, expr3) : expr1不为NULL,返回expr2;为NULL,返回expr3

SELECT last_name,  salary, commission_pct,
       NVL2(commission_pct, 
            'SAL+COMM', 'SAL') income
FROM   employees WHERE department_id IN (50, 80);

6.3 NULLIF

NULLIF (expr1, expr2) :  相等返回NULL,不等返回expr1

SELECT first_name, LENGTH(first_name) "expr1", 
       last_name,  LENGTH(last_name)  "expr2",
       NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM   employees;

 

 6.4 COALESCE

COALESCE NVL 相比的优点在于 COALESCE 可以同时处理交替的多个值。

如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE

SELECT   last_name,
         COALESCE(commission_pct, salary, 10) comm
FROM     employees
ORDER BY commission_pct;

 

7.条件表达式

7.1 CASE 表达式

例如:查询部门号为 10, 20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 , 20 号部门, 则打印其工资的 1.2 , 30 号部门打印其工资的 1.3 倍数

SELECT last_name, job_id, salary,
       CASE job_id WHEN 'IT_PROG'  THEN  1.10*salary
                   WHEN 'ST_CLERK' THEN  1.15*salary
                   WHEN 'SA_REP'   THEN  1.20*salary
       ELSE      salary END     "REVISED_SALARY"
FROM   employees;

7.2 DECODE 函数

SELECT last_name, job_id, salary,
       DECODE(job_id, 'IT_PROG',  1.10*salary,
                      'ST_CLERK', 1.15*salary,
                      'SA_REP',   1.20*salary,
              			    salary)
       REVISED_SALARY
FROM   employees;

 

8.嵌套函数

单行函数可以嵌套。

嵌套函数的执行顺序是由内到外。

SELECT last_name,
       NVL(TO_CHAR(manager_id), 'No Manager')
FROM   employees
WHERE  manager_id IS NULL;

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值