ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle单行函数

2021-06-04 11:04:31  阅读:169  来源: 互联网

标签:salary 函数 单行 日期 Oracle id SELECT name


image-20210604092134416

image-20210604092207577

单行函数

  • 操作数据对象

  • 接受参数返回一个结果

  • 只对一行进行变换

  • 每行返回一个结果

  • 可以转换数据类型

  • 可以嵌套

  • 参数可以是一列或一个值

image-20210604092319885

image-20210604092335994

大小写控制函数

函数 结果
LOWER****('SQL Course') sql course
UPPER****('SQL Course') SQL COURSE
INITCAP('SQL Course') Sql Course

大小写控制函数

显示员工 Higgins的信息:

SELECT employee_id, last_name, department_id
FROM   EMPLOYEES
WHERE  lower(last_name) = 'higgins';

字符控制函数

函数 结果
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

image-20210604100200588

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

日 期

  • Oracle 中的日期型数据实际含有两个值: 日期和时间。
SELECT last_name, hire_date
FROM   employees
WHERE  last_name like 'G%';

函数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 日期截断

image-20210604102123186

隐式数据类型转换

源数据类型 目标数据类型
VARCHAR2 or CHAR NUMBER
VARCHAR2 or CHAR DATE
NUMBER VARCHAR2
DATE VARCHAR2

image-20210604102352085

TO_CHAR函数对日期的转换

格式:

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

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

  • 日期之间用逗号隔开

SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') FROM dual;

TO_CHAR 函数对日期的转换

SELECT last_name,
       TO_CHAR(hire_date, 'DD Month YYYY')
       AS HIREDATE
FROM   employees;

TO_DATE 函数对字符的转换

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

通用函数

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

  • NVL (expr1, expr2)

  • NVL2 (expr1, expr2, expr3)

  • NULLIF (expr1, expr2)

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

NVL 函数

将空值转换成一个已知的值

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

  • 函数的一般形式:

  • NVL(commission_pct,0)

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

  • NVL(job_id,'No Job Yet')

条件表达式

  • 在 SQL 语句中使用IF-THEN-ELSE 逻辑

  • 使用两种方法:

  • CASE 表达式

  • DECODE 函数

CASE 表达式

CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn
          ELSE else_expr]
END
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;

DECODE 函数

在需要使用 IF-THEN-ELSE 逻辑时:

DECODE(col|expression, search1, result1 ,
      			   [, search2, result2,...,]
      			   [, default])
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;
SELECT last_name, salary,
       DECODE (TRUNC(salary/2000, 0),
                         0, 0.00,
                         1, 0.09,
                         2, 0.20,
                         3, 0.30,
                         4, 0.40,
                         5, 0.42,
                         6, 0.44,
                            0.45) TAX_RATE
FROM   employees
WHERE  department_id = 80;

嵌套函数

  • 单行函数可以嵌套。

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

image-20210604105434008

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

标签:salary,函数,单行,日期,Oracle,id,SELECT,name
来源: https://www.cnblogs.com/cherish-code/p/14848670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有