日期格式参数及其含义说明
D 一周中的星期几
DAY 天的名字,使用空格填充到9个字符
DD 月中的第几天
DDD 年中的第几天
DY 天的简写名
IW ISO标准的年中的第几周
IYYY ISO标准的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最后三位,两位,一位
HH 小时,按12小时计
HH24 小时,按24小时计
MI 分
SS 秒
MM 月
Mon 月份的简写
Month 月份的全名
W 该月的第几个星期
WW 年中的第几个星期
*
/
--显示当前时间,查询当前时间是这年的第几天?是这个星期的第几天?是这个月的第几天?
select sysdate,to_char(sysdate,'ddd-dd-d') "年-月-星期"
from dual;
--显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序。
select concat(last_name,first_name),to_char(start_date,'yyyy-mm')
from s_emp
order by to_char(start_date,'mm') ;
--找出在(任何年份的)7月受聘的所有雇员
select emp.last_name,start_date
from s_emp emp
where to_char(start_date,'mm') = '07';
--显示所有雇员的姓名以及满10年服务年限的日期
select concat(last_name,first_name),start_date
from s_emp
where months_between(sysdate,start_date)>=10*12;
--对于每个雇员,显示其加入公司的天数
select last_name,trunc(sysdate-start_date) day
from s_emp;
--显示所有雇员的姓名的前三个字符 :substr 截取 concat 拼接
select substr(concat(last_name,first_name),1,3)
from s_emp;
--显示正好为15个字符的雇员姓名 :条件 名字为15个字符
select concat(last_name,first_name) name
from s_emp
where length(concat(last_name,first_name)) = 15;
--显示只有首字母大写的所有雇员的姓名 条件 :姓名中首字母大写
select concat(last_name,first_name)
from s_emp
where concat(last_name,first_name)= initcap(concat(last_name,first_name));
--以年、月和日显示所有雇员的服务年限(入职了多少年多少月多少天) 无条件
select last_name ,
trunc((sysdate-start_date)/365) 年, -- 当前日期-入职时间 除以 365 年份
trunc(mod(months_between(sysdate,start_date),12)) 月, -- 进行取余 求出月份
trunc(sysdate - add_months(start_date,months_between(sysdate,start_date))) 日 -- months_between两个日期间差了多少个月 add_months 在第一个参数上加上第二个参数的月分
from s_emp;
--找出早于23年之前受雇的雇员 条件 早于23年之前(判断入职日期到现在是否大于23年)
select last_name ,start_date
from s_emp
where months_between(sysdate,start_date) > 12*23;
--以这种2001/07/08格式来显示入职时间
select to_char( start_date,'yyyy/mm/dd')
from s_emp;
--多表查询:
--1 查询所有员工的ID,名字和所在部门的名称 (员工表 关联 部门表 消除笛卡尔积)
select emp.id, emp.last_name,dept.name
from s_emp emp,s_dept dept
where emp.dept_id = dept.id;
--2查询部门名称包含Ad的员工姓名薪水 条件 (部门的名称 包含 Ad )
select dept.name,emp.id,emp.last_name,emp.salary
from s_emp emp ,s_dept dept
where emp.dept_id = dept.id and dept.name like '%Ad%';
--3查询欧洲销售部门的薪水在1000到3000的员工信息 Europe 欧洲 Sales 销售
select e.id , e.last_name , r.name , d.name
from s_emp e , s_dept d , s_region r
where e.dept_id=d.id and d.region_id=r.id and r.name='Europe'
and d.name='Sales' and salary between 1000 and 3000;
--4 查询部门名称是5位,该部门员工的薪水不等于1500,并按员工的薪水降序排序 执行顺序 1.from 2.where 3.select 4.order by
select emp.last_name, emp.salary
from s_emp emp,s_dept dept
where emp.dept_id = dept.id and length(dept.name) = 5 and salary !=1500
order by salary desc;