13人参与 • 2025-12-08 • Oracle
oracle sql 提供了极其丰富的内置函数库,这些函数是数据处理、查询和分析的强大武器。本教程将系统地介绍各类常用函数,并为每个函数提供独立的示例和注释结果。






select upper('hello oracle') from dual;
-- 返回: 'hello oracle'
select lower('hello oracle') from dual;
-- 返回: 'hello oracle'
select initcap('hello oracle world') from dual;
-- 返回: 'hello oracle world'
select length('oracle sql') from dual;
-- 返回: 10
select instr('oracle sql is cool sql', 'sql', 1, 2) from dual;
-- 返回: 21 (从第1个字符开始查找,第2次出现的'sql'的位置)
select substr('oracle database', 8, 8) from dual;
-- 返回: 'database' (从第8个字符开始,截取8个字符)
select replace('black cat and blue cat', 'cat', 'dog') from dual;
-- 返回: 'black dog and blue dog'
select concat('hello', ' world') from dual;
-- 返回: 'hello world'
select 'oracle' || ' ' || 'sql' from dual; -- 返回: 'oracle sql'
select lpad('123', 5, '0') from dual;
-- 返回: '00123'
select rpad('abc', 5, '*') from dual;
-- 返回: 'abc**'
select trim(' oracle ') from dual;
-- 返回: 'oracle'
select ltrim('$$$100', '$') from dual;
-- 返回: '100'
select rtrim('abc##', '#') from dual;
-- 返回: 'abc'
select round(123.456, 2) from dual; -- 返回: 123.46
select trunc(123.456, 2) from dual; -- 返回: 123.45
select ceil(99.1) from dual; -- 返回: 100
select floor(99.9) from dual; -- 返回: 99
select mod(10, 3) from dual; -- 返回: 1
select abs(-123) from dual; -- 返回: 123
select sysdate from dual; -- 返回: (当前日期和时间,例如 2024-03-22 10:30:00)
select systimestamp from dual; -- 返回: (当前日期时间+小数秒+时区,例如 22-mar-24 10.30.00.123456 am +08:00)
select add_months(to_date('2024-01-31', 'yyyy-mm-dd'), 1) from dual;
-- 返回: 29-feb-24 (会自动处理月末日期)
select months_between(to_date('2024-07-15', 'yyyy-mm-dd'), to_date('2024-01-15', 'yyyy-mm-dd')) from dual;
-- 返回: 6
select last_day(to_date('2024-02-10', 'yyyy-mm-dd')) from dual;
-- 返回: 29-feb-24 (2024是闰年)
select next_day(to_date('2024-03-22', 'yyyy-mm-dd'), '星期一') from dual; -- 假设nls_date_language是中文
-- 返回: 25-mar-24
select trunc(sysdate, 'mm') from dual; -- 返回: (当月的第一天,例如 01-mar-24)
select extract(year from sysdate) from dual; -- 返回: (当前年份,例如 2024)
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual; -- 返回: '2024-03-22 10:30:00' (示例)
select to_char(12345.67, 'fm99g999d00') from dual; -- 返回: '12,345.67'
select to_date('2024/01/15', 'yyyy/mm/dd') from dual;
-- 返回: 15-jan-24 (日期类型)
select to_number('1,234.56', '9,999.99') from dual;
-- 返回: 1234.56 (数字类型)
(通常与 group by 配合使用,此处为简化,对全表操作)
-- 假设 employees 表有10条记录, 其中 commission_pct 有3个非空值,2种不同的非空值 select count(*), count(commission_pct), count(distinct commission_pct) from employees; -- 返回: 10, 3, 2
select sum(salary) from employees; -- 返回: (所有员工薪水总和)
select avg(salary) from employees; -- 返回: (所有员工薪水平均值)
select max(salary) from employees; -- 返回: (最高薪水)
select min(salary) from employees; -- 返回: (最低薪水)
select nvl(commission_pct, 0) from employees; -- 返回: (如果commission_pct是null,则显示0,否则显示其本身的值)
select nvl2(commission_pct, 'has commission', 'no commission') from employees; -- 返回: (根据commission_pct是否为null,显示不同的字符串)
select department, decode(department, 'sales', 's', 'hr', 'h', 'other') as dept_code from employees; -- 返回: (将部门名转换为代码)
select salary, case when salary > 10000 then 'high' else 'normal' end as salary_level from employees; -- 返回: (根据薪水是否大于10000,显示不同的等级)
背景表:employees
create table employees (
employee_id number(10) not null,
full_name varchar2(100 char) not null,
job_title varchar2(100 char) not null,
department varchar2(50 char) not null,
salary number(10, 2) not null,
commission_pct number(4, 2),
hire_date date not null,
constraint employees_pk primary key (employee_id)
);
题目:
答案与解析:
select upper(substr(full_name, instr(full_name, ',') + 2) || ' ' || substr(full_name, 1, instr(full_name, ',') - 1)) as formatted_name from employees;
select full_name, round(months_between(sysdate, hire_date)) as months_worked from employees;
select substr(full_name, 1, instr(full_name, ',') - 1) as last_name from employees;
select full_name, salary,
case
when salary > 10000 then 'a'
when salary between 5000 and 10000 then 'b'
else 'c'
end as salary_grade
from employees;
select department, count(*) as number_of_employees, round(avg(salary), 2) as average_salary from employees group by department;
select full_name, salary + (salary * nvl(commission_pct, 0)) as total_income from employees;
select full_name, to_char(hire_date, 'yyyy"年"mm"月"dd"日"') as formatted_hire_date from employees;
select full_name, department, salary,
lag(salary, 1, null) over (partition by department order by salary desc) as next_highest_salary
from employees;
select initcap(trim(substr(full_name, 1, instr(full_name, ',') - 1))) as cleaned_last_name from employees;
select full_name, hire_date, to_char(last_day(hire_date), 'day') as last_day_of_hire_month from employees;
到此这篇关于oracle数据库常用函数的文章就介绍到这了,更多相关oracle常用函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论