SQL 小技巧 2
------查询倒数第4位是a的员工信息
where last_name like '%a___'
--------查询没填email的员工信息
where email is null
-----------查询1998年入职的员工信息
where hire_date between '1-1月-98' and '31-12月-98' where hire_date >= '1-1月-98' and hire_date<='31-12月-98'
一、单行函数:运行在单条数据上,有一条数据函数就会被执行1次。
1、字符串相关
length(str)--获取字符串的长度
--查询员工的姓的长度
select last_name,length(last_name) from employees
--查询长度是5位,并且第3位是a的员工
select * from employees where length(last_name)=5 and last_name like '__a%'
--显示字符串abcdefg的长度
select length('abcdefg') from employees
--dual 哑表,没有实际意义,只是为了select语句的语法完整性
select length('abcdefg') from dual
substr(str,begin,length)--从str中截取子串,从begin(下标从1开始)开始取长度为length个字符
select substr('abcdefg',1,3) from dual
lower(str)/upper(str) --转小写、大写
--查询姓中包含L的员工
select * from employees where upper(last_name) like '%L%'
concat(s1,s2)--字符串连接,等价于 s1 || s2
--查询员工的全名
select last_name || first_name from employees
select concat(last_name, first_name) from employees
select last_name || ' ' || first_name from employees
select concat(concat(last_name, ' '), first_name) from employees
2、数学相关
mod(n1, n2) --求余,n1 % n2
--查询编号是奇数的员工
select * from employees where mod(employee_id, 2) = 1
round(num, length)--四舍五入,对num四舍五入到小数点后length位
--查询员工的日平均工资,保留2位小数
select salary, round(salary/22 ,2) as 日平均工资 from employees
3、日期相关
sysdate --获取系统的当前日期时间
select sysdate from dual
to_char(date, '日期格式字符串')【重点】
--按指定日期格式,把日期类型转成字符串类型
--获取日期的不同部分,如年、月、日期
日期格式字符串,包含如下字符:yyyy--4位年
yy--2位年
mm--月份
dd-日期
hh24--24时
mi-分钟
ss--秒
d--星期(1-7)
day-星期(星期天/Sunday)
--按年月日时分秒显示当前日期
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual
--查看员工的入职时间
select hire_date from employees
select to_char(hire_date, 'yyyy-mm') from employees
--查看员工的入职月份
select to_char(hire_date, 'mm') from employees
--查看7月份入职的员工
select * from employees where to_char(hire_date,'mm')=7
--查看本月入职的员工
select to_char(sysdate,'mm') from dual
select * from employees where to_char(hire_date,'mm')=to_char(sysdate,'mm')
--查看上个月入职的员工
select * from employees where to_char(hire_date,'mm')=(to_char(sysdate,'mm')-1)--OK(有缺陷,如果是1月份-1后就变成0)
add_months(date, num)--对月份进行加减,num为负,则为减
--查看上个月入职的员工
select add_months(sysdate,-1) from dual
select * from employees where to_char(hire_date,'mm')=to_char(add_months(sysdate,-1),'mm')
--查看昨天入职的员工
select sysdate-1 from dual
last_day(date)--获取date的最后1天
select last_day(sysdate) from dual
trunc(date, '日期格式字符串')--按指定的格式截断日期
select trun(sysdate,'mm') from dual--获取当前月份的第1天
select trun(sysdate,'yyyy') from dual--获取年的第1天
to_date(str,'日期格式字符串')--根据给定的格式,把字符串转成日期
select to_date('2011-5-6','yyyy-mm-dd') from dual
4、处理null nvl(n1,n2)--如果n1是null则取值n2,否则取值n1(n1==null? n2 : n1)
--查看员工的年薪(月薪*12+奖金)
select salary, salary*12, salary*12+commission_pct from employees --ERROR
select salary, salary*12, salary*12+nvl(commission_pct,0) from employees