Oracle数据库学习

Oracle数据库学习

          • 1.substr字符串截取函数
          • 2.regexp_substr函数
          • 3.LPAD函数
          • 4.oracle中实现分页(rownum的使用)
          • 5.from dual的使用
          • 6.“||”字符的使用
          • 7.begin....end的使用
          • 8.decode函数。decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
          • 9.nvl函数。NVL(expr1,expr2),如果oracle数据库中第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
          • 10.NVL2函数。nvl2(expr1,值1,值2),当表达式expr1不为空时,显示值1;为空时,显示值2
          • 11.case when ...then ...else end函数。
          • 12.replace函数。replace(原字段,原字段旧内容,原字段新内容)
          • 13.trunc函数,对时间类型和数字类型操作,TRUNC(NUMBER)表示截断数字,TRUNC(date)表示截断日期
          • 14.add_months()函数。add_months(date,int);其中第一个参数为日期,第二个为按月增加的幅度。
          • 15.sys_guid()函数。生成id的函数。
          • 16.对表格字段进行修改、增加的sql语句
          • 17.FM990.00格式
          • 18.instr()函数
          • 19.abs函数,绝对值函数
          • 20.months_between函数。返回两个日期值中间含有的月份个数
          • 21.分组函数group by 和Oracle中分析函数partition by的区别
          • 22.查看oracle库的表格
          • 23.非标操作语句(以命令的形式执行)
          • 24.从一个数据库复制数据到另一个数据库
          • 25.RTRIM、LTRIM、TRIM函数的使用
          • 25.取余函数mod()
          • 26.translate函数
          • 27.带有正则表达式的函数
          • 28.with用法
          • 28.upper()和lower()函数
          • 29.oracle中,批量插入的写法
          • 30.coalesce函数的用法
          • 31.greatest与least函数的用法
          • 32.order by 1 可以表示以第一列进行排序,oracle默认升序空值在后,降序空值在前。可使用nulls First与nulls last进行控制
          • 33.dbms_randm.value()随机函数
          • 34.表格数据复制语句与WITH CHECK OPTION关键字进行有条件插入数值
          • 35.多表插入语句中,有条件的插入insert first
          • 36.regexp_like函数
          • 37.regexp_count函数
          • 38.level关键字
          • 39.listagg函数
          • 40.rank()与dense_rank()函数
          • 41.round()函数
          • 42.Date类型通过interval进行计算,计算结果扔为DATE
          • 43.lag()函数与lead()函数
          • 43.关于日期操作的函数总结
          • 44.next_day与last_day函数
          • 45.extract()函数

1.substr字符串截取函数

1.substr俗称字符串截取函数,一般用于对字符串(数据库的某字段)进行截取,也就是可以用于对于查询的字段进行截取后注入结果集合中。下面先看看函数的两种用法:

2.substr(string str,int index) 从字符串的index(索引)位置开始截取,截取后面所有的字符串。
substr(string str,int index,int length)从字符串的index(索引)位置开始截取,截取长度为length的字符串。

3.示例:select SUBSTR(“name”,0,3) as str from test;
结果:name=‘zhangsan’ str=‘zha’
4.substr(date,-2)可以表示按倒序截取尾数两位

2.regexp_substr函数

1.regexp_substr函数支持正则表达式来对字符串进行切割。相应很多人都在项目中遇到过在某一个表的某一个字段中根据某些特殊符号比如","对字符串进行的拼接的数据的存储的类型。在本次项目中有这样一次需求,在一个系统之外的数据表格中对车辆的外形参数定义为:长、宽、高的数据用逗号分隔后存入了库中的一个字段中,先需要将该字段的三段分离出来,分别存入到不同的字段中,当然实现的方式可能有很多种,我采用了insert into select的方式,先用regexp_substr将该字段拆分为三个字段,再以insert into select的方式插入到了我们需要的业务表里,全程非常快速。
2.示例

 select num,REGEXP_SUBSTR('num','[^,]+',1,1) as length,
  select num,REGEXP_SUBSTR('num','[^,]+',1,2) as width,
  select num,REGEXP_SUBSTR('num','[^,]+',1,3) as heigth,
  from test where id = 1;

regexp_substr第一个参数是源字符串(数据库字段名),第二个参数是正则表达式截取规则,第三个表示从第几个字符开始匹配正则表达式,第四个参数表示标识第几个匹配组,在本例中也就是说第几个","。

3.LPAD函数

1.lpad(string,n,[pad_string])函数,从左侧追加生成固定长度的字符串。
2.参数说明
string:字符或者参数
n:字符的长度,是返回的字符串的数量,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;
pad_string:可选参数,这个字符串是要粘贴到string的左边,若这个参数未写,lpad函数将会在string的左边粘贴空格。

 @Select("select decode(a.name_list_tag,'GBD','Y','GBDC','Y','GBDL','Y','N') \"isGBD\"," +
        "decode(c.cust_name,null,'',substr(c.cust_name,0,length(c.cust_name)-1||'*')) \"custName\"," +
        "replace(c.id_no,substr(c.id_no,length(c.id_no)-11,8),'********') \"custIdNo\"," +
        "to_char(c.date_first_reg,'YYYY-MM-dd') \"drivingRegistrationDate\"," +
        "(select b.city_name from base_bte_l_region_info b where c.city_code = b.city_code) \"insureCity\"" +
        "from appl_admin a,appl_gbd_car_info c where a.apply_no = c.apply_no and a.apply_no=#{applyNo}")
public Map getGBDCarInfo(Map map);

学习decode函数、replace函数和substr函数的使用

4.oracle中实现分页(rownum的使用)

类似于mysql中limit的作用,限制结果行数。

select * from(select  TT.*,rownum as rowno from (select * from appoint_register tab1 order by date_created) TT where rownum <= 10 ) tab2 where tab2 > 0)

解释:比较符号后的两个数字差为每页展示数量,tab2后面的数字为起始下标,rownum后面的数字为终止下标。
注意:rownum字段前面不要加表名

5.from dual的使用

启用一个虚拟表

6.“||”字符的使用

SQL语句中的拼接符号。

7.begin…end的使用
@Update("")
            void batchSaveGBD(@Param("GBDList") List<Map<String,Object>> GBDList);

二种(与ibatis标签整合)

    <insert id="insertSign" parameterClass="java.util.List">
      insert all
      <iterate conjunct=" ">
      into t_student
          (name,age)
          VALUES (
            #list[].name#,
          #list[].age#,
          )
      </iterate>
    </insert>
    select * from dual
30.coalesce函数的用法
SELECT COALESCE (c1,c2,c3,c4,c5,c6) AS c FROM dual;

1、coalesce函数是用来获取第一个不为空的列的值

2、coalesce函数里面的数据类型,必须全部都跟第一列的数据类型一致

31.greatest与least函数的用法

作用每一行上取最大值与最小值,而聚合函数max与min是作用于每一列。注意使用greast与least函数的时候要排除数据为空的情况
使用说明

32.order by 1 可以表示以第一列进行排序,oracle默认升序空值在后,降序空值在前。可使用nulls First与nulls last进行控制
33.dbms_randm.value()随机函数
34.表格数据复制语句与WITH CHECK OPTION关键字进行有条件插入数值
create table t_1  as  select * from t_old 

对插入的表格的数据进行筛选
使用WITH CHECK OPTION关键字对插入数据进行控制

Insert into (select empno,ename,hiredate from emp where hiredate <= SYSDATE WITH CHECK OPTION) values (9999,'test'.sysydate +1)
35.多表插入语句中,有条件的插入insert first
insert first 
when job in ('salesman','manager') then into emp1(empno,ename,job) values (empno,ename,deptno) 
when deptno in ('20','30') then into emp2 (empno,ename,deptno) values (empno,ename,deptno) 
select empno,ename,job,deptno from emp;

在insert first语句中,当第一个表符合条件后,第二个表将不再插入对应的行,表emp2中不再有与表emp1相同的数据EMPNO = ‘7654’

36.regexp_like函数
select * from v5 where regexp_like (data,'A')

like模糊查询与正则表达式组合

select * from v5 where regexp_like (data,'A6+')

+前面是子表达式6,表示至少匹配6一次

select * from v5 where regexp_like (data,'A6*')

*前面是子表达式6,表示至少匹配60次,等价于like1%
+表示匹配前面的子表达式一次或多次,*表示匹配前面的子表达式0次或者多次

37.regexp_count函数
select regexp_count('zhangsan,lisi,wangwu',',')  from dual

得到目标字符串中,逗号的数量

38.level关键字
select regexp_substr('zhangsan,lisi,wangwu','[^,]+',1,level),level from dual connect by <=length(translate('zhangsan,lisi,wangwu',','||'zhangsan,lisi,wangwu',','))+1

切开目标字符串并将切开的字符串按列输出

39.listagg函数
select phone, listagg(log_name, ',') within group(order by phone) logName
from int_phone
where phone = '13350162230'
group by phone

将phone列分组并将log_name同属于phone列的数值放在同一行输出。函数第一个参数是列,第二个参数是分隔符
listagg函数

40.rank()与dense_rank()函数

这两种函数排序函数,rank相同的排名会生成同样的序号,而且其后的序号与row_number相同
dense_rank相同的排序会生成同样的函数,而且其后的排序会递增

41.round()函数

这个函数四舍五入。

42.Date类型通过interval进行计算,计算结果扔为DATE
select sysdate + interval '1' day from dual;

总结:oralce中,两个DATE类型相减,结果是数值,单位是天。而两个TIMESTAMP类型相减是INTERVAL类型

43.lag()函数与lead()函数

lag()分析函数直接取得上一个记录的信息
lead()分析函数取得下一个记录的信息

43.关于日期操作的函数总结

Oracle数据库学习_第1张图片

44.next_day与last_day函数
45.extract()函数
with v1 as (
select timestamp '1981-01-02 11:02:33.55' as t1 timestamp '1981-01-01 16:30:00.30' as t2 from dual)
select extract (DAY from t1-t2)*24*60 + extract(HOUR from t1-t2)*60 + extract(MINUTE from t1-t2) as minutes from v1

总结
1.两次查询sql一起执行
2.extract函数

你可能感兴趣的:(oracle)