首页 > 其他分享 >4、单行函数

4、单行函数

时间:2024-05-18 12:29:28浏览次数:26  
标签:salary 435.45 函数 10 单行 SELECT name

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。
视频链接:
【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用
如果有侵权,请联系删除,谢谢。

本文主要讲解以下几点:

  • SQL中不同类型的函数

  • 在 SELECT 语句中使用字符,数字,日期和转换函数

  • 使用条件表达式

1、SQL函数

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

1.1、两种 SQL 函数

  • 单行函数
  • 多行函数
1.1.1、单行函数

单行函数:

  • 操作数据对象
  • 接受参数返回一个结果
  • 只对一行进行变换
  • 每行返回一个结果
  • 可以转换数据类型
  • 可以嵌套
  • 参数可以是一列或一个值

function_name [(arg1, arg2,...)]

1.1.2、单行函数有哪些
  • 字符函数
  • 数值函数
  • 日期函数
  • 转换函数
  • 通用函数

2、字符函数

1、大小写控制函数

  • LOWER:所有字符转为小写
  • UPPER:所有字符换为大写
  • INITCAP:字符首字母大写,空格分割、下划线等分割符分开的字符都算
SELECT LOWER('JUST TEST'), UPPER('just test TT'), INITCAP('this is Test, wwww_y') FROM dual;   


执行结果:
LOWER('JUSTTEST')|UPPER('JUSTTESTTT')|INITCAP('THISISTEST,WWWW_Y')|
-----------------+-------------------+----------------------------+
just test        |JUST TEST TT       |This Is Test, Wwww_Y        |

2、字符控制函数

  • CONCAT:连接不同的字符串。注意不能指定连接符。
  • SUBSTR:截取字符。SUBSTR('string', start_index, length),从start_index位置开始,截取长度为length的字符。注意字符其实索引为1。
  • LENGTH:计算给定字符串长度
  • INSTR:计算给定字符首次出现在字符串中的索引位置。INSTR('string', '给定字符')
  • LPAD | RPAD:在长度未达到指定长度时,使用给定字符填充。LPAD(salary,10,'*'):*****24000
  • TRIM:截取给定字符串两边指定字符串
  • REPLACE:将字符串中指定字符串替换为给定字符串。REPLACE(‘abcd’,’b’,’m’): amcd
SELECT CONCAT('JUST', 'TEST'), SUBSTR('this is 测试案例', 9, 10), LENGTH('this is 测试案例'), INSTR('你好,未来', '未来') FROM dual;   

执行结果:
CONCAT('JUST','TEST')|SUBSTR('THISIS测试案例',9,10)|LENGTH('THISIS测试案例')|INSTR('你好,未来','未来')|
---------------------+-------------------------+--------------------+-------------------+
JUSTTEST             |测试案例                     |                  12|                  4|


SELECT LPAD('你好,未来', 10, '='), LPAD('你好,未来', 20, '='), TRIM('H' FROM 'HelloWorldhHHhH'),REPLACE('abcd','bc','你好')  FROM dual;   

执行结果:
LPAD('你好,未来',10,'=')|LPAD('你好,未来',20,'=')|TRIM('H'FROM'HELLOWORLDHHHHH')|REPLACE('ABCD','BC','你好')|
--------------------+--------------------+------------------------------+-------------------------+
你好,未来               |==========你好,未来     |elloWorldhHHh                 |a你好d                     |

3、数字函数

  • ROUND: 四舍五入。默认不保留小数点。
  • TRUNC: 截断。默认不保留小数点。
  • MOD: 求余

1、ROUND 函数

SELECT ROUND(435.45, 2), ROUND(435.45), ROUND(435.45, -2), ROUND(435.45, -1) FROM dual;

执行结果:

ROUND(435.45,2)|ROUND(435.45,2)|ROUND(435.45,-2)|ROUND(435.45,-1)|
---------------+---------------+----------------+----------------+
         435.45|         435|             400|             440|

2、TRUNC 函数

SELECT TRUNC(435.45, 2), TRUNC(435.45), TRUNC(435.45, -2), TRUNC(435.45, -1) FROM dual;

执行结果:

TRUNC(435.45,2)|TRUNC(435.45)|TRUNC(435.45,-2)|TRUNC(435.45,-1)|
---------------+-------------+----------------+----------------+
         435.45|          435|             400|             430|

3、MOD 函数

SELECT MOD(10, 9)  FROM dual;

执行结果:

MOD(10,9)|
---------+
        1|

4、日 期

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

SELECT last_name, hire_date
FROM   employees
WHERE  last_name like 'G%';


LAST_NAME|HIRE_DATE              |
---------+-----------------------+
Greenberg|1994-08-17 00:00:00.000|
Gee      |1999-12-12 00:00:00.000|
Greene   |1999-03-19 00:00:00.000|
Grant    |1999-05-24 00:00:00.000|
Geoni    |2000-02-03 00:00:00.000|
Gates    |1998-07-11 00:00:00.000|
Grant    |2000-01-13 00:00:00.000|
Gietz    |1994-06-07 00:00:00.000|

4.1、函数SYSDATE

返回:

  • 日期
  • 时间
SELECT SYSDATE  FROM dual;



SYSDATE                |
-----------------------+
2024-05-18 10:22:09.000|

4.2、日期的数学运算

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

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

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

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

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


LAST_NAME|WEEKS                                    |
---------+-----------------------------------------+
King     |1313.490419973544973544973544973544973545|
Kochhar  |  1799.6332771164021164021164021164021164|
De Haan  |1635.490419973544973544973544973544973543|

4.3、日期函数


5、转换函数

数据类型转换分为隐性和显性

5.1、隐式数据类型转换

Oracle 自动完成下列转换:

SELECT SYSDATE + 1, 12 + '12', '12' + '12' FROM dual;

执行结果:

SYSDATE+1              |12+'12'|'12'+'12'|
-----------------------+-------+---------+
2024-05-19 11:12:49.000|     24|       24|

5.2、显式数据类型转换

1、TO_CHAR函数对日期的转换

TO_CHAR(date, 'format_model')

格式:

  • 必须包含在单引号中而且大小写敏感
  • 可以包含任意的有效的日期格式。
  • 日期之间用逗号隔开。
SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh:mi:ss') FROM dual;

执行结果:
TO_CHAR(SYSDATE,'YYYY-MM-DDHH:MI:SS')|
-------------------------------------+
2024-05-18 11:14:52                  |

2、日期格式的元素

格式 示例
YYYY 2004
YEAR TWO THOUSAND AND FOUR
MM 02
MONTH JULY
MON JUL
DY MON
DAY MONDAY
DD 02
  • 时间格式

  • 使用双引号向日期中添加字符

3、TO_CHAR 函数对日期的转换

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'

4、TO_DATE 函数对字符的转换

  • 使用 TO_DATE :

  • 使用 TO_DATE 函数将字符转换为数字:
SELECT TO_DATE('2012年10月29日 08:10:21','yyyy"年"mm"月"dd"日"hh:mi:ss')
From dual;

执行结果:

TO_DATE('2012年10月29日08:10:21','YYYY"年"MM"月"DD"日"HH:MI:SS')|
----------------------------------------------------------+
                                   2012-10-29 08:10:21.000|

5、TO_CHAR函数对数字的转换

TO_CHAR(number, 'format_model')

下面是在TO_CHAR 函数中经常使用的几种格式:

6、TO_CHAR函数对数字的转换

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

执行结果:

SALARY     |
-----------+
  $6,000.00|

7、TO_NUMBER 函数对字符的转换

  • 使用 TO_NUMBER 函数将字符转换成日期:

TO_NUMBER(char[, 'format_model'])

  • 使用 TO_NUMBER :
SELECT TO_NUMBER('¥1,234,567,890.00','L999,999,999,999.99')
from dual

执行结果:

TO_NUMBER('¥1,234,567,890.00','L999,999,999,999.99')|
----------------------------------------------------+
                                          1234567890|

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')
SELECT commission_pct, last_name, nvl(commission_pct, '0')  FROM EMPLOYEES e ;

执行结果:

COMMISSION_PCT|LAST_NAME  |NVL(COMMISSION_PCT,'0')|
--------------+-----------+-----------------------+
              |King       |                      0|
              |Kochhar    |                      0|
              |De Haan    |                      0|



SELECT last_name, salary, NVL(commission_pct, 0),
   (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;

6.2、NVL2 函数

NVL2 (expr1, expr2, expr3)

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

类似于三元表达式:exp1 != null ? exp2 : exp3


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、条件表达式

在 SQL 语句中使用IF-THEN-ELSE 逻辑
使用两种方法:

  • CASE 表达式
  • DECODE 函数

7.1、CASE 表达式

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

CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn
          ELSE else_expr]
END

-- 查询部门号为 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 函数

在需要使用 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;

使用decode函数的一个例子:

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;

8、嵌套函数

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

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

标签:salary,435.45,函数,10,单行,SELECT,name
From: https://www.cnblogs.com/huageyiyangdewo/p/18199019

相关文章

  • 有关字符串的函数接口
    目录strstr函数,用于从一个字符串中查找子串strtok函数,用于分割字符串strstr函数,用于从一个字符串中查找子串strtok函数,用于分割字符串......
  • Pytorch中torch.max()函数维度的说明
    对于函数torch.max(tensor,dim,keepdim=False),需要厘清两个概念一个是torch.max怎么比较的实际上是取被比较元素对应位置的最大值如果是在一个向量中比较,那每个元素都是【c】的形式,对应位置就是本身比较,宏观来讲就是取该向量最大元素。如果在一个二维矩阵中比较,被比较元素......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
       通过结合具体的数学问题,引导高中生深入分析问题,有效地构建求解问题的数学模型,可以使学生逐步掌握数学问题求解的基本思路以及模型建构的方法与注意事项。但是离开了反复训练,无法从根本上提升高中生的数学建模能力。因此,在平时的高中数学教学中,教师要注意结合数学教学的内......
  • 函数计算助力领健信息为“看牙”注入 AI 活力
    作者:姜伟、龚杨、周韬、王彬发展背景领健成立于2015年,总部位于上海,并在全国设立了20余家分支机构,拥有100项软件著作权、91项注册商标、35项发明专利,致力为口腔诊所、医美机构等消费医疗企业提供经营管理一体化解决方案。领健拥有ISO/IEC27001国内国际双认证、公安部......
  • 函数计算帮助领健为“看牙”注入AI活力
    作者:姜伟,龚杨,周韬,王彬客户介绍和业务背景领健成立于2015年,总部位于上海,并在全国设立了20余家分支机构,拥有100项软件著作权、91项注册商标、35项发明专利,致力为口腔诊所、医美机构等消费医疗企业提供经营管理一体化解决方案。领健拥有ISO/IEC27001国内国际双认证、公安部等保......
  • 函数调用、函数参数、类型提示、名称空间
    【一】函数的调用方法【1】直接调用函数defstudent(name,age):print(f"mynameis{name}andmyageis{age}")直接调用函数student(name='qwer',age=22)【2】用表达式调用函数用一个新变量存储函数的内存地址然后调用defadd(x,y):returnx+yresult=......
  • 自定义数据类型、标量值、内嵌表值、多语句表值函数的操作
    自定义数据类型、标量值、内嵌表值、多语句表值函数的操作自定义数据类型、标量值、内嵌表值、多语句表值函数的操作  合集-数据库知识(7) 1.SQLServer实战一:创建、分离、附加、删除、备份数据库04-242.SQLServer实战二:创建、修改、复制、删除数据库表并加以数据......
  • 欧拉函数、整除分块和扩展欧几里得
    欧拉函数欧拉函数(写作\(\varphi(x)\)),表示\(i\in[1,x]且\gcd(i,x)=1\)的\(i\)的数量。乍一看好像很难求,但我们先考虑最简单的情况,即\(x\in\mathbb{P}\)(\(\mathbb{P}\)表示质数集)的情况。首先很容易看出\(\varphi(x)=x-1\),因为\(x\in\mathbb{P}\),所以\(\foralli......
  • 使用函数计算FC的主要步骤
    使用函数计算FC的主要步骤初步了解函数计算FC的运行原理和使用流程以后,小陈准备动手开始使用函数计算FC来实现业务需求。在动手前,为了避免走错路耽误了功能的上线进度,小陈决定再找大刘确认一下。小陈:师傅,我了解了函数计算FC的大致使用流程,感觉基础功能使用起来应该不复杂。大刘......
  • 函数与服务的概念。
    本课程关键知识点总结:1、函数即服务 (FaaS) 是在Serverless架构下的一种云计算形式,其中的“函数”的概念实质上是一种服务,也可以说是在Serverless架构下,计算平台中的一种计算模块粒度。 2、Serverless架构的函数计算FC产品,具有以下优势:高扩展性,横向扩展是完全自动的、有弹......