Oracle的使用

2023-10-17 08:18:22 浏览数 (1)

引言

和mysql对比着学习,收获会大一些,默认会mysql,下面的内容写得粗略一些

mysql请看这里 : mysql文章

代码语言:javascript复制
SQl支持的命令:
数据定义语言(DDL):create,alter,drop
数据操纵语言(DML):insert,delete,update,select
数据控制语言(DCL):grant,revoke
事务控制语言(TCL):commit,savepoint,rollback

数据定义语句
建表:
create table 表名(
	字段名  数据类型  约束条件
	...
);
新增字段:
alter table 表名 add 字段名 数据类型;
修改字段:
ALTER TABLE 表名 RENAME COLUMN 原来的字段名 TO 新字段名;
修改字段的数据类型:
ALTER TABLE 表名 modify(字段名 更改后的数据类型);
添加约束:
ALTER TABLE 表名 add constraint 约束名 约束类型(约束的字段名);
删除字段:
ALTER TABLE 表名 DROP COLUMN 字段名;


修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
删除表:
drop table 表名;

数据操纵语言
基本的增删改查差不多,但是分页不同
select,update,delete,insert(都会哈)
利用现有的表创建表  创建视图的话(可定制,某一张表的数据或者多张表的数据) 使用view
create table t_test1 as select id,name,s_age from t_test1;
选择无重复的行  
select distinct name from t_test1;
插入来自其他表中的记录
insert into t_test1 select id,name,s_age from t_test1;


给Scott用户授予创建视图的权限
	(在system用户下授权,命令行输入sqlplus  然后用户名 system 密码 自己设置的密码)
GRANT CREATE VIEW TO scott;

查询表结构:
	desc 表名;

给字段名起别名:
	字段名后面   空格  别名(建议给别名带上双引号,不论你起大小写别名,都会按照自己写的别名输出)

对于字符型数据和日期型数据时:使用单引号
	示例:choose_date = to_date('2021-09-17 15:15:15','yyyy-mm-dd hh24:mi:ss')
对用户的操作
代码语言:javascript复制
命令行超级管理员登录
sqlplus /as sysdba
显示当前用户
show user;


登入Oracle
sqlplus /nolog
超级管理员连接
connect / as sysdba
创建用户
create user 用户名 identified by 密码;
授权(共三种权限 connect,resource ,dba)(connect 允许连接,创建会话; resource 可以创建表,索引; dba 管理员权限 ; unlimited tablespace: 无限制的表空间的权限)
grant connect,resource to 用户名;
授予创建视图的权限
grant create view to 用户名;
管理员修改用户密码:
alter user 用户名 identified by 密码;
撤销用户的授权
revoke connect, resource from 用户;
删除用户连同数据权限,表之类的全部删除
drop user 用户名 cascade;  
数据类型
代码语言:javascript复制
个人理解:平时就用俩种数据类型date和varchar2

字符型
	固长
		char		(最多定义2000个字符长度)
		varchar
	变长
		varchar2    (最多定义4000个字符长度)
数值型	
	number	最高精度38位
日期型
	date
操作符
代码语言:javascript复制
SQL操作符
算术操作符: -*/
比较操作符:=,!=,<>,>,>=,<,<=,between and,in,not in,like,is null,is not null等
逻辑操作符:and,or,not
集合操作符:union,union all,intersect,minus
连接操作符:||
多表关联(和mysql一样的用法)
	左连接 left join 表名 on 条件		(左表不限制,右表显示符合条件的数值,空显示null)
	右连接 right join 表名 on 条件
	全外连接 full join 表名 on 条件
minus是获取第一张表独有的数据(俩张表都有的数据不显示,只显示第一张表特有的)
intersect显示两张表中都有的数据(交集)
union是整合两张表的数据,共有的数据只显示一次(去重效果)
union all是纯粹的两张表数据整合,显示所有
函数

单行函数和多行函数

多行函数

代码语言:javascript复制
就是聚合函数
avg,min,max,sum,count

单行函数

代码语言:javascript复制
字符函数(9种)

	大小写转换函数
		LOWER()			将字符串转换为小写
		UPPER()			将字符串转换为大写
		INITCAP()			把每个单词的首字母变成大写
		
	字符处理函数
		CONCAT()			连接两个字符串	(Oracle中只能俩个参数,可以嵌套使用) concat(param1,parma2)
		SUBSTR()			截取子字符串(全角算2字符)
		LENGTH()			返回字符串的长度(全角算1字符)
		INSTR()			字符串中搜索字符位置(全角算1字符)
		LPAD()			在左边添加字符
		RPAD()			在右边添加字符
		TRIM()			删除左边和右边空字符串
		REPLACE()			替换子字符串
		
数字函数
	round	--->	四舍五入  
	trunc	--->	截取		trunc(num,保留几位小数)		或者		trunc(date,'格式')
	mod		--->	取余		mod(num1,num2)	示例:mod(5,3)   余数:2  mod(100,4)  余数:0
	
日期函数
	MONTHS_BETWEEN		两日期相差多少月,返回两个日期间隔月数
	ADD_MONTHS			在一个日期上加或减若干月到新的日期,返回指定月数后的日期 也可为0就是当前日期
	NEXT_DAY			取得从当前日期开始遇到的第一指定星期几的日期,返回下周某一天的日期
	LAST_DAY			计算指定日期所在月份的最后一天的日期,返回本月最后一天的日期
	ROUND				取得按年或月四舍五入得到的新日期,四舍五入后的期间第一天
	TRUNC				取得按年或月截取得到的新日期,返回日期所在期间的第一天
	
转换函数
	to_char()	把日期转换为字符、把数字转换为字符
	to_number	字符的格式和模板的模式必须要一致
	to_date()	将日期转按指定格式换成日期类型

查询当前时间:SYSDATE
	示例:select sysdate from 表名;

其他函数:
	nvl(表达式1,表达式2)
		表达式 1:指的是字段名称;表达式 2:指的是将该字段的 null 转换成的值
		例如:在一些字段进行计算的时候,有的值为null,所以无法计算,就需要使用到这个了
		
	sign(数值)
		sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
		例如:select id,sign(id-2) from t_decode;
	decode
		格式一:、decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)
		格式二:decode(字段或字段的运算,值1,值2,值3)
		这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
		当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
			使用decode的几种方式
				判断字符串
				函数分段
				比较大小
				使用表达式来搜索字符串
				实现行列转换
				结合Lpad函数,如何使主键的值自动加1并在前面补0
				
	decode和case …when …then … end有时候差不多
		decode(表达式,值1,值2,值3,值4,默认值)
			如果表达式的值为1,输出值2,值为3的时候输出值4,否则输出默认值
			例如:SELECT decode(name,'a','1500a','b','1500b','杂七杂八') FROM t_decode1
	
	
部分函数的具体使用:
	substr()	截取字符串
	    格式一:substr(string string,int start,int size);			常用
	    格式二:substr(string string,int offset);
		说明:
		格式一:string是需要截取的字符串,start字符串开始的位置(注:当start为0或1时都是从第一位开始截取,)size是要截取的字符串长度
		格式二:string是要截取的字符串,a是从第offset个字符串开始截取后面所有的字符串

	instr()	返回int		通常和substr组合使用:作为substr的第三个参数	
						示例:SUBSTR(b.TASK_ID,1,instr(b.TASK_ID,'-',1,7) - 1)
		instr('字符串','查找的字符')
			instr(source,target)
		instr('字符串','查找的字符','从什么位置开始查','第几次出现')	常用
			instr(source,target,offset,count)
			
	trunc函数
		语法:trunc(num,[int])
			对数字进行截取
			对日期进行截取  例如: trunc(sysdate,'yyyy')
索引
代码语言:javascript复制
提高SQL的性能

创建索引
create index 索引名 on 表名(字段名);

重建索引
alter index 索引名 rebuild;

删除索引
drop index 索引名;
测试
代码语言:javascript复制
-- 测试decode和case when 

--SELECT id,decode(id,1,100,2,200,3,300,1000) FROM t_decode1
-- 100 200 300  其余3项为1000 有2项id为空

--SELECT sum(decode(id,1,100,2,200,3,300,1000)) as 求和  FROM t_decode1
-- 6600

--SELECT sum(CASE WHEN decode(id,1,100,2,200,3,300,1000)>(id*10)*2 THEN 1 ELSE 0 end) AS 求和 FROM t_decode1
-- 7 id为null的不参与运算

-- 测试左连接 别名
--SELECT t.*,d.* FROM  T_DECODE1 d LEFT JOIN  t_level t ON d.id=t.id

--SELECT a.*,b.navgroup FROM (SELECT a.id AS id,a.name AS name  FROM t_decode1 a ORDER BY id desc) a LEFT JOIN (SELECT  b.id AS id,b.lvl1group AS navgroup from T_LEVEL b) b ON a.id=b.id
-- 查出三个字段 id name navgroup 9行数

instr()	返回int
	instr('字符串','查找的字符')
		instr(source,target)
	instr('字符串','查找的字符','从什么位置开始查','第几次出现')
		instr(source,target,offset,count)

sign()
	sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
	例如:select id,sign(id-2) from t_decode;
	
Lpad()
	在字段id前边补字段0 长度为2
	select lpad(id,2,0) from t_decode;
	01
	02
	03
	
rpad()
	在字段右边填充
--SELECT rpad(id,3,5) FROM t_test1 
-- 755
-- 155
-- 255

case函数使用,俩种形式
    select '日期',sum(case when 结果='胜' then 1 else 0 end),sum(case when 结果='负' then 1 else 0 end)
    from table
    group by '日期'

举例
select 
	case name when 'a' then id else 0 end as id_1,
    case name when 'b' then id else 0 end as id_2,
    case name when 'c' then id else 0 end as id_3 ,
    CASE name WHEN 'abc' THEN id ELSE 0 END AS id_5
from t_decode1;

测试上面的函数

代码语言:javascript复制
字符串拼接
concat(参数1,参数2)	-- 只能俩个参数
可以使用||来连接多个参数

--concat()
--使用||来连接多个多个时需要嵌套
--SELECT id,name,concat(id,'-->name') AS cc FROM t_test1
--SELECT concat(concat(id,'-->'),name) AS cc FROM t_test1
-- 可以连接多个
--SELECT id||'-->'||name FROM t_test1

-- instr()
--select instr('helloworld','l',1,3) t from t_test1;
-- 9
--select instr('helloworld','l') t from t_test1;
-- 3

--to_number()函数可以将char或varchar2类型的string转换为一个number类型的数值;
--SELECT TO_NUMBER('186.22') FROM t_decode1 
-- 186.22
-- 16进制转10进制
--SELECT to_number('1f','xxxx') FROM t_decode1
--31
    
--SELECT to_char(SYSDATE,'yyyy-mm-dd') FROM t_test1
-- 2021-09-17

--SELECT to_date('2020-12-12','yyyy-mm-dd') FROM t_test1
-- 2020-12-12 00:00:00

--substr
--SELECT substr('Hello',0,3) value FROM t_test1
-- HEL
--SELECT substr('Hello',3) value FROM t_test1
--llO

-- 对数字截取 去掉小数
--SELECT trunc(156.85) FROM t_decode1
-- 156
-- 保留2位小数
--SELECT trunc(156.7896,2) FROM t_decode1
-- 156.78
-- 参数为负数  从左侧截取 截取的位数替换为0
--SELECT trunc(1566.7896,-2) FROM t_decode1
-- 1500

-- lower 转小写
--SELECT lower('CAD') FROM t_test1

-- upper 转大写
--SELECT upper('cad') FROM t_test1

-- initcap 首字母大写
--SELECT initcap('password and user') FROM t_test1

-- concat 连接字符串
--SELECT concat(name,'-->') FROM t_test1

-- mod 函数 10/3 1
--SELECT mod(10,3) FROM t_test

SELECT ROUND(45.943,2) "小数点后两位",
       ROUND(45.943,0) "个位",
       ROUND(45.942,-1) "十位"
    FROM t_test1;
-- 45.94 	46		50

-- SELECT TRUNC(45.943,2)"小教点后两位",
-- TRUNC(45.343, 0)"个位",
-- TRUNC(45.942,-1)"十位"
-- FROM t_test1;
-- 45.94	45		40

-- SELECT mod(10,5) FROM t_test1
-- 0
-- SELECT mod(10,3) FROM t_test1
-- 1

-- 2021-09-18 11:22:46
--SELECT sysdate FROM t_test1

-- 测试日期函数  MONTHS_BETWEEN(startDate,endDate) 10.9
--SELECT MONTHS_BETWEEN(to_date('2022-08-15','yyyy-MM-dd'),to_date('2021-09-18','yyyy-MM-dd')) FROM t_test1 

-- ADD_MONTHS(date,number) 2021-10-18
--SELECT ADD_MONTHS(SYSDATE,1) FROM t_test1 

--next_day(date,'星期几') 返回下一个星期几的时间 2021-09-19 
--SELECT NEXT_DAY(SYSDATE,'星期日') FROM t_test1 

-- last_day(date)  返回本月的最后一天 2021-09-30
--SELECT last_day(to_date('2021-09-18','yyyy-mm-dd')) FROM t_test1


select sysdate 当时日期,
       ROUND(sysdate)最近0点日期,
       ROUND(sysdate,'day')最近星期日,
       ROUND(sysdate,'month')最近月初,
       ROUND(sysdate,'q')最近季出日期,
       ROUND(sysdate,'year')最近年初日期
 from t_test1;
 
--to_number 字符的格式和模板的模式必须要一致
--SELECT to_number('$800.05','$999,999.9900') FROM t_test1

-- to_date
--SELECT to_date('2021-09-18 14:17:22','yyyy-mm-dd HH24:mi:ss') FROM t_test1
 
测试
-- 数值转字符 $ 放一个$符号
--SELECT to_char(555.36,'$999,999.99') FROM t_test1
-- $555.36
-- L 显示本地货币单位
--SELECT to_char(555.36,'L999,999.99') FROM t_test1
-- ¥555.36
-- 0 强制显示0
--SELECT to_char(555.56,'L00000.0000') FROM t_test1
-- ¥00555.5600

-- 测试trunc
--返回本月第一天  2021-10-01  mm可写为month  都是一样的  同理  year yyyy  day  dd
--SELECT sysdate,trunc(sysdate,'mm') FROM TBL_STUDENT ts 
--SELECT ts.BIRTHDAY ,sysdate AS 当前时间,trunc(ADD_MONTHS(SYSDATE,-2),'mm') AS 三月之前 FROM TBL_STUDENT ts 
 

-- 测试replace函数  
--   1二哥3456789  把2改为二哥
--SELECT replace('123456789','2','二哥') FROM TBL_STUDENT ts 

-- 测试regexp_replace  是 replace函数的扩展  通过正则表达式来替换
-- *a*b*d*d*e*r*f*g*g*g 把0-9数字替换为*
--SELECT REGEXP_REPLACE('1a2b3d4d5e6r7f8g9g0g','[0-9]','*') FROM TBL_STUDENT ts 

整理一下

测试日期函数

代码语言:javascript复制
-- 测试日期函数 

-- 当前日期 sysdate
-- 2021-09-18 11:22:46
SELECT sysdate FROM t_test1

-- 日期相差几个月   MONTHS_BETWEEN(startDate,endDate) 10.9
-- 第一个参数要比第二个的时间大 才行  不然就计算出负数
SELECT MONTHS_BETWEEN(to_date('2022-08-15','yyyy-MM-dd'),to_date('2021-09-18','yyyy-MM-dd')) FROM t_test1 

-- 指定日期加或减若干月 ADD_MONTHS(date,number) 
-- 2021-11-09
SELECT ADD_MONTHS(TO_DATE('2021-09-09','yyyy-MM-dd'), 2)  FROM t_test1
-- 2021-04-09
SELECT ADD_MONTHS(TO_DATE('2021-09-09','yyyy-MM-dd'),-5)  FROM t_test1

-- 返回下一个星期几的时间 next_day(date,'星期几') 
-- 2021-09-19 
SELECT NEXT_DAY(SYSDATE,'星期日') FROM t_test1 

-- 返回本月的最后一天  last_day(date)  
-- 2021-09-30
SELECT last_day(to_date('2021-09-18','yyyy-mm-dd')) FROM t_test1

-- 取得按年或月四舍五入得到的新日期,四舍五入后的期间第一天
select sysdate 当时日期,
       ROUND(sysdate)最近0点日期,
       ROUND(sysdate,'day')最近星期日,
       ROUND(sysdate,'month')最近月初,
       ROUND(sysdate,'q')最近季出日期,
       ROUND(sysdate,'year')最近年初日期
 from t_test1;

-- 对日期进行截取
-- 取得按年或月截取得到的新日期,返回日期所在期间的第一天
SELECT trunc(sysdate,'yyyy') FROM t_decode1
-- 2021-01-01 00:00:00
SELECT trunc(sysdate,'mm') FROM t_decode1
-- 2021-09-01 00:00:00:00
SELECT trunc(sysdate,'d') FROM t_decode1
-- 2021-09-12 00:00:00
-- trunc在对日期进行处理的时候,只能对日期进行提取不能是数字或者字符。
SELECT trunc(to_date('2015-05-12','yyyy-mm-dd'),'yyyy') FROM t_decode1
-- 2015-01-01 00:00:00
分页查询

oracle数据库中是没有limit关键字的,想在Oracle数据库中实现limit功能可以通过使用rownum来限制结果集行数。

分页:where后面加rownum 或者 between and 中使用 rownum

代码语言:javascript复制
分页
返回10~20条数据,tableName改为自己的表名
select * from (select rownum rn,t.* from tableName t) where rn<=20 and rn >10; 

rownum	行号
代码语言:javascript复制
-- 分页
--SELECT * FROM (SELECT ROWNUM rn,t.* FROM t_test1 t) WHERE rn <= 4 AND rn >2;
--SELECT * FROM (SELECT rownum rn, t.* FROM t_test1 t) WHERE 1=1 AND  rn BETWEEN 4 AND 6;
--SELECT * FROM (SELECT rownum rn, t.id,t.name FROM t_test1 t) WHERE   rn BETWEEN 3 AND 6;

-- 使用where rownum <=2 进行分页  只有< 和<= 的判断 返回结果集前2行
-- select * from t_countries where rownum <=2

-- 分页 成功 返回 11~20行数据
-- select * from (select rownum rn,t.* from t_countries t) where rn<=20 and rn >10 ;

-- order by region_id desc
-- select * from (select rownum rn,t.* from t_countries t) where rn<=20 and rn >10 order by region_id desc;

-- 左连接   分页
-- select * from (select rownum rn,t.*,r.region_name from t_countries t left join t_regions r on t.region_id = r.region_id  )  
where rn<=20 and rn >10  order by region_id desc;

-- 降序   分页
select  *  from (select  rownum , t.*  from (select * from table order by oid desc) ) where rownum <10 and rownum >0;
必看

猜猜看这条示例查出了什么呢? 仅提供一个思路,示例没有实际意义

代码语言:javascript复制
示例:
select (a.total/b.num) from (select count(*) total from A) a,
(select count(*) num from B where sex = '男') b

其实更推荐使用 left join 的形式 上面的当数据量大时,性能较差,少使用临时表去查询,会全表扫描!

左连接示例  以A表为主表
SELECT
	a.STU_CODE,
	a.STU_DEP,
	c.DNAME,
	b.STU_CM
FROM
A表 a
LEFT JOIN B表 b ON
	a.STU_CODE = b.STU_CODE
LEFT JOIN C表 c  ON
	c.DNAME = a.STU_DEP
dual虚表

什么是dual表?

代码语言:javascript复制
用来构成select的语法规则,oracle保证dual里面永远只有一条记录(1行1列)

用途:
1、查看当前用户
2、使用系统函数
3、得到序列的下一个值或当前值(查看序列值)
4、当做计算器
5、查空值

测试案例

代码语言:javascript复制
SELECT count(*) FROM dual
-- 1
SELECT USER FROM dual
-- SCOTT
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
--获得当前系统时间   2021-10-19 15:28:39
select SYS_CONTEXT('USERENV','TERMINAL') from dual
--获得主机名   unknown
select SYS_CONTEXT('USERENV','language') from dual
--获得当前locale   SIMPLIFIED CHINESE_CHINA.AL32UTF8
select dbms_random.random from dual
--获得一个随机数  1736190461
SELECT * FROM dual
-- X
SELECT 9*9 FROM dual
-- 81  可以用来计算

select your_sequence.nextval from dual
--获得序列your_sequence的下一个值
select your_sequence.currval from dual
--获得序列your_sequence的当前值

伪列LEVEL

注意:伪列 LEVEL 必须和 connect by 连用

代码语言:javascript复制
有些时候伪列level和rownum可以做替换使用
但并不是level和rownum完全一样

测试案例

代码语言:javascript复制
SELECT LEVEL FROM dual CONNECT BY LEVEL <=3
-- 1 2 3 输出三行1列

--LEVEL 可以参与运算
SELECT LEVEL*5,LEVEL-9 FROM dual CONNECT BY LEVEL BETWEEN 1 AND 5

-- 返回十个年月信息
SELECT
	to_char(ADD_MONTHS (
to_date('2021-10-30', 'yyyy-mm-dd'),
1 - 1 * LEVEL
), 'yyyy-mm') tenmonth
FROM
	dual
CONNECT BY
	LEVEL BETWEEN 1 AND 10
ORDER BY
	ADD_MONTHS (
to_date('2021-10-30', 'yyyy-mm-dd'),
	1 - 1 * LEVEL
) ASC

灵活运用dual虚表很重要

代码语言:javascript复制
-- 日、周、月、年

--  获得十天
SELECT
	to_char(to_date('2021-05-30', 'yyyy-mm-dd') (1- 1 * LEVEL) , 'yyyy-mm-dd') "startDate"
FROM
	dual
CONNECT BY
	LEVEL BETWEEN 1 AND 10
ORDER BY
	 to_date('2021-05-30', 'yyyy-mm-dd') (1 - 1 * LEVEL)  asc

	 
-- 十周
SELECT
	to_char(to_date('2021-05-30', 'yyyy-mm-dd') (1- 7 * LEVEL) , 'yyyy-mm-dd') "startDate",
	to_char(to_date('2021-05-30', 'yyyy-mm-dd') (1- 7 * LEVEL)  6, 'yyyy-mm-dd') "endDate"
FROM
	dual
CONNECT BY
	LEVEL BETWEEN 1 AND 10
ORDER BY
	 to_date('2021-05-30', 'yyyy-mm-dd') (1 - 7* LEVEL)  ASC

	 
--	十个月
SELECT
	to_char(ADD_MONTHS(to_date('2021-11-29', 'yyyy-mm-dd'), 1-1 * LEVEL), 'yyyy-mm') "startDate",
	to_char(ADD_MONTHS(to_date('2021-11-29', 'yyyy-mm-dd'), 1-1 * LEVEL), 'yyyy-mm-dd') "endDate"
FROM
	dual
CONNECT BY
	LEVEL BETWEEN 1 AND 10
ORDER BY
	ADD_MONTHS(to_date('2021-11-29', 'yyyy-mm-dd'), 1-1 * LEVEL) ASC


-- 获得十年
SELECT
	to_char(ADD_MONTHS ( to_date('2021-05-30', 'yyyy-mm-dd'), 12 - 12 * LEVEL ), 'yyyy') "startDate"
FROM
	dual
CONNECT BY
	LEVEL BETWEEN 1 AND 10
ORDER BY
	ADD_MONTHS ( to_date('2021-05-30', 'yyyy-mm-dd'),
	12 - 12 * LEVEL ) ASC
附录
代码语言:javascript复制
SELECT to_date('2021-09-18 14:17:22','yyyy-mm-dd HH24:mi:ss') FROM t_test1
常用格式	'yyyy-mm-dd HH24:mi:ss'

YYYY:四位表示的年份 
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪 
MM:01~12的月份编号 
MONTH:九个字符表示的月份,右边用空格填补 
MON:三位字符的月份缩写 
WW:一年中的星期 
D:星期中的第几天 
DD:月份中的第几天 
DDD:年所中的第几天 
DAY:九个字符表示的天的全称,右边用空格补齐 
HH,HH12:一天中的第几个小时,12进制表示法 (当前时间大于12点的时候会报错)
HH24:一天中的第几个小时,取值为00~23 (建议使用这个)
MI:一小时中的分钟 
SS:一分钟中的秒 
SSSS:从午夜开始过去的秒数
代码语言:javascript复制
日期格式基础			年月日
格式				   解释
YYYY,YYY,YY			分别代表4位,3位,2位的数字年份
YEAR				年的拼写
MM					数字月
MONTH				月份的全拼名称
MON					月份的缩写
DD					数字日
DAY					星期的全拼
DY					星期的缩写

时间格式
格式控制符			 描述
AM					表示上午或下午
HH24,HH12			24小时制或12小时制
Ml					分钟
SS					秒钟
SP					数字的拼写
TH					数字的序数词
“特殊字符”			  在日期时间中加入特殊的字符

举例
HH24:MI:SS AM		15:45:32 PM
	SELECT to_char(sysdate,' HH24:MI:SS AM') FROM t_test1
	14:05:34 下午
DD “of” MONTH		12 of OCTOBER
ddspth				fourteenth
代码语言:javascript复制
使用to_char函数将数字作为字符显示
9	代表数字
0	多余的数字强制显示0
$	加一个$符号
L	显示本地货币单位
.	显示小数点
,	显示千分位

连接信息

代码语言:javascript复制
spring:
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@127.0.0.1:1521/orcl
    username: SCOTT
    password: 123456

依赖

代码语言:javascript复制
<dependency>
   <groupId>com.oracle.database.jdbc</groupId>
   <artifactId>ojdbc8</artifactId>
   <scope>runtime</scope>
</dependency>

0 人点赞