文章目录
- 1、Oracle 11g 数据库支持中文的逗号
- 2、获取Oracle数据库的版本号
- 3、REGEXP_SUBSTR函数的使用(regexp_substr)
- 4、replace的使用
- 5、字符和日期类之间的转换
- 6、获取当前是星期几
- 7、使用to_char获取对应的星期格式
- 8、connect by
- 9、union和union all的区别
- 10、group by
1、Oracle 11g 数据库支持中文的逗号
2、获取Oracle数据库的版本号
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNmWjPk8-1598423569279)(表的层级关系.assets/image-20200826142706913.png)] Oracle的一些简单用法_数据](https://file.cfanz.cn/uploads/png/2023/01/18/23/13EbINTS3e.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CSzVkWwp-1598423569282)(表的层级关系.assets/image-20200826142725116.png)] Oracle的一些简单用法_数据库_02](https://file.cfanz.cn/uploads/png/2023/01/18/23/03442Q4KPc.png)
--第一张图
SELECT * FROM V$VERSION;
--第二张图
SELECT * FROM PRODUCT_COMPONENT_VERSION
3、REGEXP_SUBSTR函数的使用(regexp_substr)
REGEXP_SUBSTR(source_char, pattern [, position [, occurrence [, modifier ]]])
source_char :需要进行正则处理的字符串
pattern :进行匹配的正则表达式
position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
occurrence :标识第几个匹配组,默认为1
modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
测试:
--1、查询使用正则分割后的第一个值,也就是34
SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,1,'i') AS STR FROM DUAL;
--结果是:34
--2、查询使用正则分割后的最后一个值,也就是-23
SELECT REGEXP_SUBSTR('34,56,-23','[^,]+',1,3,'i') AS STR FROM DUAL;
--结果是:-23
--3、获取一个多个数值的列,从而能够让结果以多行的形式展示出来
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7;
--结果是:
--1
--2
--3
--4
--5
--6
--7
--4、将上面REGEXP_SUBSTR的occurrence关联
SELECT NVL(REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i'), 'NULLL') AS STR FROM DUAL CONNECT BY LEVEL <= 7;
--结果是:
--34
--56
---23
--null
--null
--mull
--null
--5、优化上面的SQL语句,让生成的行的数量符合实际情况
SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL, 'i') AS STR FROM DUAL
--
--获取到有几个数字
CONNECT BY LEVEL <= LENGTH('34,56,-23') - LENGTH(REGEXP_REPLACE('34,56,-23', ',', '')) + 1;
--结果是:
--34
--56
--23
4、replace的使用
regexp_replace与replace作用相同,但功能更加强大
repalce(str_source,str1,str2) 把 str_source 中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时,为剔除
replace(str_source,str1) 把str_source 中的 str1 字符串剔除
regexp_replace(str_source,pattern_str,rep_str) 支持正则表达式,用法类似于 replace,但功能更强大
regexp_replace(str_source,pattern_str) 把 str_source 中的 pattern_str 字符串剔除
测试:
--当我们想要剔除大小写的时候,我们可以在length的基础上使用大小写的转换,这样我们统计的字符就不用再去多余的做匹配
SELECT ROWNUM,
REGEXP_SUBSTR('klFjsdlfjlksdafkdjsaklfdsfhjsdhfjGFGHFJHJFjlfrtrfhhh', '[^f]+', 1, LEVEL, 'i')
FROM DUAL
CONNECT BY LEVEL <=
LENGTH('klFjsdlfjlksdafkdjsaklfdsfhjsdhfjGFGHFJHJFjlfrtrfhhh') -
LENGTH(REPLACE(LOWER('klFjsdlfjlksdafkdjsaklfdsfhjsdhfjGFGHFJHJFjlfrtrfhhh'),'f')) + 1
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMmbl4ou-1598423569285)(表的层级关系.assets/image-20200826142810971.png)] Oracle的一些简单用法_数据_03](https://file.cfanz.cn/uploads/png/2023/01/18/23/W37SW98Kf4.png)
5、字符和日期类之间的转换
--打印当前的年月日时分秒。注意分钟要使用mi,否则会出现格式代码出现两次的错误(第一个图)
SELECT to_char(SYSDATE,'yyyy-mm-dd--HH24:mi:ss') FROM dual
with params as
(select '2019-04-04' begDate from dual)
--获取指定的参数,将其转换成对应的日期格式,并执行对应的月份操作,最终获取日期的年份(第二个图)
select to_char(add_months(to_date((SELECT begDate FROM PARAMS),'yyyy-mm-dd'),+12),'yyyy') from dual
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UA61MgMz-1598423569286)(表的层级关系.assets/image-20200826142839393.png)] Oracle的一些简单用法_字符串_04](https://file.cfanz.cn/uploads/png/2023/01/18/23/44FRW7C474.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nvpUG2H1-1598423569288)(表的层级关系.assets/image-20200826142936854.png)] Oracle的一些简单用法_数据库_05](https://file.cfanz.cn/uploads/png/2023/01/18/23/edbQ002KA4.png)
6、获取当前是星期几
--后面的标识符使用d 即表示输出星期几
SELECT to_char(sysdate - 1, 'd') FROM dual
--结果:今天正常的是星期三
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAfoM8JV-1598423569289)(表的层级关系.assets/image-20200826143035601.png)] Oracle的一些简单用法_字符串_06](https://file.cfanz.cn/uploads/png/2023/01/18/23/fYe31f2076.png)
7、使用to_char获取对应的星期格式
select
--1、先获取到当前星期几
--2、在拿到我们这周的第一天
--3、利用rownum(行号1,2,3...)完成对日期的加减运算,达到计算出上一个星期的效果
sysdate - (to_number(to_char(sysdate - 1, 'd')) - 1) - (rownum - 1) * 7 as startDate,
sysdate + (7 - to_number(to_char(sysdate - 1, 'd'))) - (rownum - 1) * 7 as endDate,
--1、获取日期有iw和ww两种,iw为自然周,ww为以1月1日为起点的为一周
--2、依然利用行号完成星期的运算
to_number(to_char(sysdate, 'iw')) - rownum + 1 as weekIndex
from dual
connect by level<= 4;
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWSZh9MC-1598423569290)(表的层级关系.assets/image-20200826142644377.png)] Oracle的一些简单用法_数据_07](https://file.cfanz.cn/uploads/png/2023/01/18/23/fd474e3c42.png)
8、connect by
--基本用法:可以对指定数据输出指定的行数
SELECT SYSDATE FROM dual
CONNECT BY LEVEL <5 --将level修改为rownum也可以。我可以将我需要的数据打印4行,数字5也可以是一个变量,方便我们修改数据
--高级用法:用来父子节点的嵌套输出数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2m738k4o-1598423569291)(表的层级关系.assets/image-20200826143144139.png)] Oracle的一些简单用法_字符串_08](https://file.cfanz.cn/uploads/png/2023/01/18/23/R0SZ20089M.png)
9、union和union all的区别
--UNION ALL不会合并相同的数据
--UNION 会合并相同的数据
SELECT SYSDATE FROM dual
UNION ALL
SELECT SYSDATE FROM dual
10、group by
--由于group by的意义为将数据分组,即我们查询出来的字段应该为一个集合数据,而非我们最初的单个数据
--即select后面只能跟group by后面的字段或者聚合函数字段
SELECT orddate,sum(intordid),avg(sysordid) FROM ttrd_otc_trade GROUP BY orddate









