Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Oracle的使用

Oracle的使用

作者头像
栖西
发布于 2023-10-17 00:18:22
发布于 2023-10-17 00:18:22
30200
代码可运行
举报
文章被收录于专栏:栖西栖西
运行总次数:0
代码可运行

引言

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

mysql请看这里 : mysql文章

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
命令行超级管理员登录
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
代码运行次数:0
运行
AI代码解释
复制
个人理解:平时就用俩种数据类型date和varchar2

字符型
	固长
		char		(最多定义2000个字符长度)
		varchar
	变长
		varchar2    (最多定义4000个字符长度)
数值型	
	number	最高精度38位
日期型
	date
操作符
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
就是聚合函数
avg,min,max,sum,count

单行函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
字符函数(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、正数还是负数,分别返回01-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为01时都是从第一位开始截取,)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
代码运行次数:0
运行
AI代码解释
复制
提高SQL的性能

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

重建索引
alter index 索引名 rebuild;

删除索引
drop index 索引名;
测试
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 测试decode和case when 

--SELECT id,decode(id,1,100,2,200,3,300,1000) FROM t_decode1
-- 100 200 300  其余3项为10002项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、正数还是负数,分别返回01-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
代码运行次数:0
运行
AI代码解释
复制
字符串拼接
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二哥34567892改为二哥
--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
代码运行次数:0
运行
AI代码解释
复制
-- 测试日期函数 

-- 当前日期 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
代码运行次数:0
运行
AI代码解释
复制
分页
返回10~20条数据,tableName改为自己的表名
select * from (select rownum rn,t.* from tableName t) where rn<=20 and rn >10; 

rownum	行号
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 分页
--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
代码运行次数:0
运行
AI代码解释
复制
示例:
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
代码运行次数:0
运行
AI代码解释
复制
用来构成select的语法规则,oracle保证dual里面永远只有一条记录(11列)

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

测试案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
有些时候伪列level和rownum可以做替换使用
但并不是level和rownum完全一样

测试案例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
-- 日、周、月、年

--  获得十天
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
代码运行次数:0
运行
AI代码解释
复制
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:四位表示的年份 
YYYYYY:年份的最后三位、两位或一位,缺省为当前世纪 
MM01~12的月份编号 
MONTH:九个字符表示的月份,右边用空格填补 
MON:三位字符的月份缩写 
WW:一年中的星期 
D:星期中的第几天 
DD:月份中的第几天 
DDD:年所中的第几天 
DAY:九个字符表示的天的全称,右边用空格补齐 
HHHH12:一天中的第几个小时,12进制表示法 (当前时间大于12点的时候会报错)
HH24:一天中的第几个小时,取值为00~23 (建议使用这个)
MI:一小时中的分钟 
SS:一分钟中的秒 
SSSS:从午夜开始过去的秒数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
日期格式基础			年月日
格式				   解释
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 下午
DDofMONTH		12 of OCTOBER
ddspth				fourteenth
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用to_char函数将数字作为字符显示
9	代表数字
0	多余的数字强制显示0
$	加一个$符号
L	显示本地货币单位
.	显示小数点
,	显示千分位

连接信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@127.0.0.1:1521/orcl
    username: SCOTT
    password: 123456

依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
   <groupId>com.oracle.database.jdbc</groupId>
   <artifactId>ojdbc8</artifactId>
   <scope>runtime</scope>
</dependency>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle日期函数「建议收藏」
结果:(如果指定的日期是月份的最后一天,返回的也是新的月份的最后一天,如果新的月份比指定的月份日期少,将会自动调回有效日期)
全栈程序员站长
2022/09/09
3.3K0
sql基础知识:日期的常用用法
日期操作 select sysdate,add_months(sysdate,12) from dual; -- + 1 year select sysdate,add_months(sysdate,1) from dual; -- + 1 month select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; -- + 1 week select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH2
用户1154259
2018/01/17
8560
oracle日期时间函数总结
常常写 sql 的同学应该会接触到一些 oracle 的日期时间函数, 比如: 財务软件或者人力资源软件须要依照每年, 每季度, 每月, 甚至每一个星期来进行统计.
全栈程序员站长
2022/07/12
1.4K0
Oracle DBA的SQL编写技能提升宝典(含SQL资源)
背景:要迁移数据库,需要创建与源库相同的表空间,大小与源库相同。由于个别表空间较大,手工添加可能需要写很多的脚本,于是同事通过PL/SQL解决了问题。
数据和云
2021/10/13
1.1K0
Oracle DBA的SQL编写技能提升宝典(含SQL资源)
从迁移开发角度看差异:Oracle vs MySQL
随着近些年来数据库技术发展演进,及国内数据库日益活跃。越来越多的企业将数据库从传统商业数据库迁移到开源或国产数据库平台。本文对比了最为常见的一种情况,从Oracle迁移到MySQL需要关注的一些差异点。这方便应用研发在迁移之初做好必要的评估备。此外,因MySQL生态发展很广泛,很多数据库产品会将MySQL作为兼容的首选。因此,很多其他类型的数据库迁移,也可以参考此文内容。
用户5548425
2021/11/18
1.4K0
从迁移开发角度看差异:Oracle vs MySQL
oracle 操作时间的函数总结
注意:这里只有 MONTHS_BETWEEN 有效。YEARS_BETWEEN 和 DAYS_BETWEEN 这两个都是无效函数
炒香菇的书呆子
2024/04/27
1.7K0
Oracle根据时间查询
以下SQL,只会查询2021-01-01至2021-1-2 00:00:00的数据
鱼找水需要时间
2023/02/16
2.1K0
Oracle根据时间查询
oracle(1)基础总结
--------------------------------------------------------------------------------------------------------where
Dlimeng
2023/06/27
2670
Oracle数据库相关函数解析
在 Oracle 中, 提供了一个虚拟表格, 叫 dual, 专门用于进行测试, 可以从daul 中查询任何数据
时间静止不是简史
2020/07/27
7050
Oracle迁移MySQL 8特殊SQL处理 顶
我们创建一个表,并生成两个表分区CUS_PART1,CUS_PART2.关于分区的分类可以参考https://www.cnblogs.com/wnlja/p/3979684.html
算法之名
2020/05/18
1.1K0
Oracle迁移MySQL 8特殊SQL处理
                                                                            顶
SQL 基础-->常用函数
lpad | rpad(x,width [,pad_string]) 字符定长,(不够长度时,左|右填充)
Leshami
2018/08/07
1.2K0
Oracle 函数大全[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154754.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/07
2.9K0
Oracle 函数大全[通俗易懂]
oracle 下一些零散的命令和 sql 语句
以前学过一些数据库相关的知识,回想起来刚入门还是看了传智播客的视频,杨忠科老师的sql语句教程。现在已经好多年了,中间自己也不断的在用,但是一直没有提高,只是会简单增删改查,今天学的 cast..then..等等都没怎么用过,所以记录一下没有学到过的内容,以后备用。
我与梦想有个约会
2023/10/20
1870
Oracle常用SQL查询
业务场景:在报表开发中,只需要每个分组最近的一条数据。例如:某天的明细数据中,可能存在多条记录,只需要该天最后更新的一条记录。
程裕强
2021/11/01
1.3K0
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
异构数据库的迁移(譬如从Oracle迁移到PostgreSQL)工作主要包括三个方面,
PawSQL
2024/08/20
2460
Oracle到PostgreSQL数据库的语法迁移手册(建议收藏)
Oracle 与 MySQL 的差异分析(7):日期和时间函数
Oracle 中的日期类型是带有时分秒的,获取当前时间可以用sysdate,如果要获得更高的精度可以用 systimestamp。查出来的结果的格式受系统参数控制,相当于做了默认的to_char 操作。
一头小山猪
2020/04/10
3.1K0
oracle 中的除法函数,Oracle 函数
round:按指定精度对十进制数四舍五入,如:round(45.923, 1),结果,45.9
全栈程序员站长
2022/09/09
7.1K0
关于Oracle单行函数与多行函数
Oracle单行函数分为五种类型:字符函数、数值函数、日期函数、转换函数、通用函数
星哥玩云
2022/08/17
1.1K0
Oracle到高斯数据库的SQL语法迁移手册(建议收藏)
异构数据库的迁移(譬如从Oracle迁移到openGauss)工作主要包括三个方面,
PawSQL
2024/08/20
5560
Oracle到高斯数据库的SQL语法迁移手册(建议收藏)
oracle的操作
在为一个Oracle数据库系统创建用户之后,这些用户既不能与数据库服务器连接,也不能做任何事情,除非他们具有执行特定数据库操作的权限. oracle内置权限:(SELECT * FROM SYSTEM_PRIVILEGE_MAP查);
微醺
2019/01/17
1.6K0
推荐阅读
相关推荐
Oracle日期函数「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验