0
点赞
收藏
分享

微信扫一扫

Oracle的一些简单用法

Ichjns 2023-01-19 阅读 72


文章目录

  • ​​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数据库的版本号

Oracle的一些简单用法_数据

Oracle的一些简单用法_数据库_02

--第一张图
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

Oracle的一些简单用法_数据_03


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

Oracle的一些简单用法_字符串_04

Oracle的一些简单用法_数据库_05


6、获取当前是星期几

--后面的标识符使用d 即表示输出星期几
SELECT to_char(sysdate - 1, 'd') FROM dual
--结果:今天正常的是星期三

Oracle的一些简单用法_字符串_06


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;

Oracle的一些简单用法_数据_07


8、connect by

--基本用法:可以对指定数据输出指定的行数
SELECT SYSDATE FROM dual
CONNECT BY LEVEL <5 --将level修改为rownum也可以。我可以将我需要的数据打印4行,数字5也可以是一个变量,方便我们修改数据


--高级用法:用来父子节点的嵌套输出数据

Oracle的一些简单用法_字符串_08


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


举报

相关推荐

0 条评论