【Oracle学习笔记】8.函数(Function)

1.数值函数

  • ABS(求绝对值)
  • ROUND(四舍五入)ROUND(4.567, 2) 返回 4.57,将数字 4.567 四舍五入到小数点后两位
  • TRUNC(截断)TRUNC(4.567, 1) 返回 4.5,截断数字 4.567 到小数点后一位
  • MOD(取模)

2.字符函数

  • CONCAT(字符串拼接)CONCAT('Hello, ', 'World!') 返回 'Hello, World!'
  • SUBSTR(截取子字符串)SUBSTR('Hello, World!', 7, 5) 返回 'World',从字符串第 7 个字符开始截取 5 个字符
  • LENGTH(获取字符串长度)
  • UPPER(转换为大写)
  • LOWER(转换为小写)

3.日期函数

  • SYSDATE(获取当前日期和时间)
  • ADD_MONTHS(增加或减少指定月数)ADD_MONTHS(SYSDATE, 3) 返回当前日期 3 个月后的日期
  • MONTHS_BETWEEN(计算两个日期之间的月数差)
  • NEXT_DAY(获取指定日期之后的下一个指定星期几的日期)

4.聚合函数

  • SUM(求和)
  • AVG(求平均值)
  • COUNT(计数)
  • MIN(求最小值)
  • MAX(求最大值)
    这些函数通常与 GROUP BY 子句一起使用,用于对数据进行分组统计。
    例如:
--可以统计每个部门的员工数量和平均工资
SELECT department, COUNT(*), AVG(salary) FROM employees GROUP BY department;

5.转换函数

  • 数据类型转换函数:
    • TO_CHAR(将日期或数字转换为字符串)TO_CHAR(SYSDATE,'YYYY-MM-DD') 将当前日期转换为指定格式的字符串
    • TO_DATE(将字符串转换为日期)TO_DATE('2023-10-01','YYYY-MM-DD') 将给定格式的字符串转换为日期类型
    • TO_NUMBER(将字符串转换为数字)
  • 字符集转换函数:在处理多字符集环境时,CONVERT 等函数可用于字符集之间的转换。

6.条件函数

  • CASE 表达式:CASE WHEN 条件 THEN 取值 ELSE 取值 END 语句用于在 SQL 中实现条件逻辑。有简单 CASE 表达式和搜索 CASE 表达式两种形式。
  • 示例:
-- 简单CASE表达式
SELECT employee_name,
       salary,
       CASE department
           WHEN 'HR' THEN salary * 1.1
           WHEN 'IT' THEN salary * 1.05
           ELSE salary
           END AS adjusted_salary
FROM employees;

-- 搜索CASE表达式
SELECT employee_name,
       salary,
       CASE
           WHEN salary < 5000 THEN 'Low'
           WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium'
           ELSE 'High'
           END AS salary_level
FROM employees;
  • DECODE 函数:DECODE 函数是 CASE 表达式的一种简化形式,用于简单的条件判断。例如,DECODE(department, 'HR', salary * 1.1, 'IT', salary * 1.05, salary) 功能与上述简单 CASE 表达式类似。

7.分析函数

  • ROW_NUMBER(为结果集的每一行生成一个唯一的行号)
  • RANK(为结果集的每一行生成一个排名,相同值排名相同,下一个排名会跳过相应数量)
  • DENSE_RANK(与 RANK 类似,但相同值排名相同,下一个排名不会跳过)
  • LAGLEAD(用于访问结果集中当前行之前或之后的行的数据)
  • 示例:
-- 使用ROW_NUMBER为员工按工资排名
SELECT employee_name,
       salary,
       ROW_NUMBER() OVER (ORDER BY salary DESC) AS salary_rank
FROM employees;

-- 使用LAG获取前一个员工的工资
SELECT employee_name,
       salary,
       LAG(salary, 1, 0) OVER (ORDER BY employee_id) AS prev_salary
FROM employees;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值