SQL单表语句总结

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’;

时间
日期的使用:

  1. sysdate
  2. 用日期计算
    (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. 隐式数据类型转换(自动转换) 字符串到日期
  2. 显示数据类型转换

直接赋值转换
1.varchar2或char 到 number
2.varcchar2或char 到 date
3.number 到 varchar2
4.date 到 varchar2

表达式赋值
1.varchar2或char 到 number
2.varcchar2或char 到 date

隐式转换问题:

  1. 性能影响:转换时会导致索引的无效,而进行全表扫描
  2. 不便于阅读:

数字、字符、日期间的转换

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值