SQL语句总结
一、字符串:
示例一:
查询员工表,使用“The job id for” 链接转换大写格式后的员工姓名,并使用“is”字符串链接他们的工作ID,要求将工作ID转换小写格式。修改名为“详细的雇佣表”
SQL> select 'The job id for ‘||upper(last_name)||’ is '||lower(job_id) “详细的雇佣表” from employees;
示例二:
显示雇员higgins的雇员号、姓名和部门号
SQL> select employee_id,last_name,department_id from employees where last_name=‘higgins’;
EMPLOYEE_ID LAST_NAME DEPARTMENT_ID
SQL> select employee_id,last_name,department_id from employees where last_name=‘Higgins’;
EMPLOYEE_ID LAST_NAME DEPARTMENT_ID
205 Higgins 110
SQL> select employee_id,last_name,department_id from employees where last_name=initcap(‘higgins’);
EMPLOYEE_ID LAST_NAME DEPARTMENT_ID
205 Higgins 110
SQL> select employee_id,last_name,department_id from employees where lower(last_name)=‘higgins’;
字符串处理函数
1.concat(‘hello’,‘world’) helloworld
SQL> select concat(‘hello’,‘world’) from dual;
CONCAT(‘HELLO’,‘WORLD’)
helloworld
SQL> select concat(‘祁蒙恩’,concat(‘李姿’,‘锐’)) from dual;
CONCAT(‘祁蒙恩’,CONCAT(‘李姿’,
祁蒙恩李姿锐
2.substr(‘helloworld’,1,5) hello
SQL> select substr(‘helloworld’,1,5) from dual;
SUBSTR(‘HELLOWORLD’,1,5)
hello
SQL> select substr(‘helloworld’,-1,5) from dual;
SUBSTR(‘HELLOWORLD’,-1,5)
d
length(‘helloworld’) 10
SQL> select length(‘helloworld’) from dual;
LENGTH(‘HELLOWORLD’)
10
3.instr(‘helloworld’,‘w’) 6
SQL> select instr(‘helloworld’,‘w’) from dual;
INSTR(‘HELLOWORLD’,‘W’)
6
SQL> select instr(‘helloworld’,‘l’,1,2) from dual;
INSTR(‘HELLOWORLD’,‘L’,1,2)
4
4.lpad(salary,10,’*’) *****24000
5.rpad(salary,10,’*’) 24000*****
trim(‘h’ from ‘helloworld’) elloworld
去掉头尾两侧
SQL> select trim(‘h’ from ‘holloworldh’) from dual;
TRIM(‘H’FROM’HOLLOWORLDH’)
olloworld
SQL> select trim(both ‘h’ from ‘holloworldh’) from dual;
TRIM(BOTH’H’FROM’HOLLOWORLDH’)
olloworld
去掉头
SQL> select trim(leading ‘h’ from ‘holloworldh’) from dual;
TRIM(LEADING’H’FROM’HOLLOWORLD
olloworldh
去掉尾
SQL> select trim(trailing ‘h’ from ‘holloworldh’) from dual;
TRIM(TRAILING’H’FROM’HOLLOWORL
holloworld
替换
SQL> select replace(‘helloworld’,‘ll’,‘LL’) from dual;
REPLACE(‘HELLOWORLD’,‘LL’,‘LL’
heLLoworld
示例一:
显示所有岗位名称从第4个字符位置开始包含字符串REP的
雇员的信息,将雇员的姓和名链接显示,还显示雇员名的长度。以及名字中字母a的位置
SQL> select concat(first_name,last_name),length(last_name),instr(last_name,‘a’)
from employees where substr(job_id,4)=‘REP’;
示例二:
显示名以n结束的雇员的数据,将雇员的姓和名链接显示在一起,还显示雇员名的长度,以及名字中字母a的位置
select concat(first_name,last_name),length(last_name),instr(last_name,‘a’)
from employees where substr(last_name,-1)=‘n’;
示例三:
将手机号中间四位用星号代替
SQL> select replace(‘18599555235’,substr(‘18599555235’,4,4),’****’) from dual;
REPLACE(‘18599555235’,SUBSTR(’
185****5235
数字字符:
1.round()
SQL> select round(3.14159,2)from dual;
ROUND(3.14159,2)
3.14
SQL> select round(3333.14159,-1)from dual;
ROUND(3333.14159,-1)
3330
SQL> select round(3333.14159)from dual; 取整数,相当于0
ROUND(3333.14159)
3333
2.trunc()
SQL> select trunc(3333.54159)from dual;
TRUNC(3333.54159)
3333
3.mod()
SQL> select mod(16,3)from dual;
MOD(16,3)
1
示例1:
计算所有是销售代表(SA_REP)的雇员的工资被5000除后的余数
SQL> Select last_name,salary,mod(salary,5000) from employees where job_id=‘SA_ERP’;
时间
日期的使用:
- sysdate
- 用日期计算
(1) Date+number 日期
(2) date-number 日期
SQL> select sysdate from dual;
SYSDATE
2019/8/1 14
SQL> select sysdate+1 from dual;
SYSDATE+1
2019/8/2 14
(3) date-date 天数
(4) date+number/24 日期
SQL> select last_name,sysdate-hire_date from employees;
SQL> select last_name,round(sysdate-hire_date) from employees;
示例:
显示所有在部门90中的雇员的名字和从业的周数。雇员的总工作时间以周计算
SQL> select last_name,(sysdate-hire_date)/7 from employees where department_id=90;
LAST_NAME (SYSDATE-HIRE_DATE)/7
King 841.370719246032
Kochhar 723.227862103175
De Haan 967.799290674603
日期函数:
Months_between:两个日期之间的月数
Add_months:加日历到日期
Next_day:下个星期几是几号
Last_day:指定月的最后一天
Rounnd:四舍五入日期
Trunc:截断日期
1.select months_between(sysdate,hire_date) from employees;
SQL> select sysdate from dual;
SYSDATE
2019/8/1 14
SQL> select add_months(sysdate,1) from dual;
ADD_MONTHS(SYSDATE,1)
2019/9/1 14:28:03
SQL> select next_day(sysdate,‘星期一’) from dual;
NEXT_DAY(SYSDATE,‘星期一’)
2019/8/5 14:30:58
SQL> select next_day(sysdate,2) from dual;
NEXT_DAY(SYSDATE,2)
2019/8/5 14:31:45
本月最后一天
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDATE)
2019/8/31 14:33:3
以天为单位运算
SQL> select sysdate from dual;
SYSDATE
2019/8/1 14
SQL> select round(sysdate,‘dd’) from dual;
ROUND(SYSDATE,‘DD’)
2019/8/2
SQL> select round(sysdate) from dual;
ROUND(SYSDATE)
2019/8/2
以月为单位
SQL> select round(sysdate,‘mm’) from dual;
ROUND(SYSDATE,‘MM’)
2019/8/1
以年为单位运算
SQL> select round(sysdate,‘yy’) from dual;
ROUND(SYSDATE,‘YY’)
2020/1/1
示例1:
查询所有受雇在15年(180个月)以内的雇员的employee_id,hire_date.显示他们已经雇佣的月,从受雇日期开始加6个月的试用期后的日期,受雇日期后的第一个星期五是几号,以及受雇月的最后一天是几号
select employee_id,hire_date,months_between(sysdate,hire_date),add_months(hire_date,6),next_day(hire_date,‘星期五’),last_day(hire_date) from employees where months_between(sysdate,hire_date)<180;
示例2:
查询受雇日期,找出2002年开始工作的那些人,用round和trunc函数显示开始的月份
SQL> select round(hire_date,‘month’),trunc(hire_date,‘month’) from employees where hire_date like ‘%02’;
ROUND(HIRE_DATE,‘MONTH’) TRUNC(HIRE_DATE,‘MONTH’)
2002/9/1 2002/8/1
2002/9/1 2002/8/1
2002/12/1 2002/12/1
2002/6/1 2002/6/1
2002/6/1 2002/6/1
2002/6/1 2002/6/1
2002/6/1 2002/6/1
7 rows selected
数据类型转换
- 隐式数据类型转换(自动转换) 字符串到日期
- 显示数据类型转换
直接赋值转换
1.varchar2或char 到 number
2.varcchar2或char 到 date
3.number 到 varchar2
4.date 到 varchar2
表达式赋值
1.varchar2或char 到 number
2.varcchar2或char 到 date
隐式转换问题:
- 性能影响:转换时会导致索引的无效,而进行全表扫描
- 不便于阅读:
数字、字符、日期间的转换
Tochar日期的格式模板
YYYY:数字全写年
Year:年的拼写
MM:月的两数字值
Month:月的全名
Mon:月字母缩写
Dy:周中的天缩写 星期
Day:周中的天的全写
SQL> select to_char(sysdate) from dual;
TO_CHAR(SYSDATE)
01-8月 -19
SQL> select to_char(sysdate,‘yyyy’) from dual;
TO_CHAR(SYSDATE,‘YYYY’)
2019
SQL> select to_char(sysdate,‘year’) from dual;
TO_CHAR(SYSDATE,‘YEAR’)
twenty nineteen
SQL> select to_char(sysdate,‘mm’) from dual;
TO_CHAR(SYSDATE,‘MM’)
08
SQL> select to_char(sysdate,‘month’) from dual;
TO_CHAR(SYSDATE,‘MONTH’)
8月
SQL> select to_char(sysdate,‘mon’) from dual;
TO_CHAR(SYSDATE,‘MON’)
8月
SQL> select to_char(sysdate,‘day’) from dual;
TO_CHAR(SYSDATE,‘DAY’)
星期四
SQL> select to_char(sysdate,‘dy’) from dual;
TO_CHAR(SYSDATE,‘DY’)
星期四
SQL> select to_char(sysdate,‘dd’) from dual;
TO_CHAR(SYSDATE,‘DD’)
01
时间格式模板
SQL> select to_char(sysdate) from dual;
TO_CHAR(SYSDATE)
01-8月 -19
SQL> select to_char(sysdate,‘yyyy’) from dual;
TO_CHAR(SYSDATE,‘YYYY’)
2019
SQL> select to_char(sysdate,‘year’) from dual;
TO_CHAR(SYSDATE,‘YEAR’)
twenty nineteen
SQL> select to_char(sysdate,‘mm’) from dual;
TO_CHAR(SYSDATE,‘MM’)
08
SQL> select to_char(sysdate,‘month’) from dual;
TO_CHAR(SYSDATE,‘MONTH’)
8月
SQL> select to_char(sysdate,‘mon’) from dual;
TO_CHAR(SYSDATE,‘MON’)
8月
SQL> select to_char(sysdate,‘day’) from dual;
TO_CHAR(SYSDATE,‘DAY’)
星期四
SQL> select to_char(sysdate,‘dy’) from dual;
TO_CHAR(SYSDATE,‘DY’)
星期四
SQL> select to_char(sysdate,‘dd’) from dual;
TO_CHAR(SYSDATE,‘DD’)
01
SQL> select to_char(sysdate,‘am’) from dual;
TO_CHAR(SYSDATE,‘AM’)
下午
SQL> select to_char(sysdate,‘hh’) from dual;
TO_CHAR(SYSDATE,‘HH’)
03
SQL> select to_char(sysdate,‘mi’) from dual;
TO_CHAR(SYSDATE,‘MI’)
22
SQL> select to_char(sysdate,‘ss’) from dual;
TO_CHAR(SYSDATE,‘SS’)
05
SQL>
SQL> select to_char(sysdate,‘mi:ss’) from dual;
TO_CHAR(SYSDATE,‘MI:SS’)
24:16
SQL> select to_char(sysdate,‘hh:mi:ss’) from dual;
TO_CHAR(SYSDATE,‘HH:MI:SS’)
03:24:35
SQL> select to_char(sysdate,‘hh:mi:ss am’) from dual;
TO_CHAR(SYSDATE,‘HH:MI:SSAM’)
03:24:59 下午
SQL> select to_char(sysdate,’“百战程序,第” dd “of” hh:mi:ss am’) from dual;
TO_CHAR(SYSDATE,’"百战程序,第
百战程序,第 01 of 03:27:03 下午
SQL> select to_char(sysdate,‘yyyy “年” mm “月” dd “日”’) from dual;
TO_CHAR(SYSDATE,'YYYY"年"MM"月
2019 年 08 月 01 日
SQL> select to_char(sysdate,‘yyyy-mm-dd’) from dual;
TO_CHAR(SYSDATE,‘YYYY-MM-DD’)
2019-08-01
示例:
显示所有雇员的名字和受雇日期,受雇日期以2007年8月10日 12:00:00 AM显示
SQL> select last_name,to_char(hire_date,‘yyyy"年"MM"月"DD"日" HH:MI:SS AM’) from employees;
LAST_NAME TO_CHAR(HIRE_DATE,'YYYY"年"MM"
Baer 2002年06月07日 12:00:00 上午
Higgins 2002年06月07日 12:00:00 上午
Gietz 2002年06月07日 12:00:00 上午
107 rows selected
To_char 数字到字符
SQL> select to_char(789.78,‘999,999.99’) from dual;
TO_CHAR(789.78,‘999,999.99’)
789.78
SQL> select to_char(733333389.78,‘999,999.99’) from dual;
TO_CHAR(733333389.78,'999,999.
###########
SQL> select to_char(389.78,‘000,999.99’) from dual;
TO_CHAR(389.78,‘000,999.99’)
000,389.78
SQL> select to_char(789.78,’$999,999.99’) from dual;
TO_CHAR(789.78,’$999,999.99’)
$789.78
SQL> select to_char(789.78,‘L999,999.99’) from dual;
TO_CHAR(789.78,‘L999,999.99’)
¥789.78
SQL> select to_char(789.78,‘FM999,999.99’) from dual;
TO_CHAR(789.78,‘FM999,999.99’)
789.78
SQL> select to_char(789.78,‘FM000,999,999.99’) from dual;
TO_CHAR(789.78,'FM000,999,999.
000,000,789.78
示例:
查询雇员Whalen,显示他的薪水,在薪水前添加美元符号与千位符
SQL> select last_name,salary,to_char(salary,‘fm999,999,999.00’) from employees where last_name=‘Whalen’;
LAST_NAME SALARY TO_CHAR(SALARY,'FM999,999,999.
字符转数字
3.7.4to_date 字符到日期转换
TO_DATE(‘arg1’,’fmt’):将字符串转换为日期格式。带格式化样式 fmt。
arg1:字符串类型。需要转换的数据。
fmt:转换格式。
SQL> select to_date(‘2019-08=01 11:34’,‘yyyy-MM-DD HH:MI’)from dual;
TO_DATE(‘2019-08=0111:34’,'YYY
2019/8/1 11:34:00
SQL> select to_date(‘2019-08=01 11:34’,‘yyyy-mm-DD HH:MI’)from dual;
TO_DATE(‘2019-08=0111:34’,'YYY
2019/8/1 11:34:00
SQL> select to_date(‘2019-08=01 11:34’,‘yyyy-mm-dd hh:mi’)from dual;
TO_DATE(‘2019-08=0111:34’,'YYY
2019/8/1 11:34:00
SQL> select to_date(‘2019年8月1日 11点30分’,‘yyyy"年"mm"月"dd"日"hh"点"mi"分"’)from dual;
TO_DATE(‘2019年8月1日11点30分’
2019/8/1 11:30:00