0
点赞
收藏
分享

微信扫一扫

Oracle常用语句以及常用函数总结

残北 2022-03-11 阅读 189

Oracle常用语句以及常用函数总结

常用语句

  • Oracle基础
--建表语句
create table table_name(
id as varchar(10)
);

--按顺序插入数据
insert into table_name values('1');
--按指定顺序插入数据
insert into table_name(column_name1,column_name2,column_name3.....values(value1,value2,value3.....);

--添加1列
alter table table_name add column column_name varchar(255);
--删除数据
delete from table_name where id='01';
--更新数据
update table_name
    set id = '1'
where id = '1.0';

--更新进阶
update table_name
    set id = 
            case 
                when id='1.0' then '1'
              else null 
            end;
--修改字段名
alter table table_name cloumn modify_before_column_name to modify_after_column_name;

--修改表名
alter table table_name rename old_table_name to new_table_name;
select * from dual;

常用函数

  • 日期函数
--to_char转字符串格式
select to_char(sysdate,'yyyy-mm-dd') from dual;
--to_date转日期格式
select to_date('2022-01-01 22:32:10','yyyy-mm-dd hh24:mi:ss') from dual;
--extract获取年份(用于截取年、月、日、时、分、秒){ year | month | day | hour | minute | second } 
select extract(year from sysdate) as year from dual;

  • 条件判断函数
--decode相当于case when函数的简写
select decode(column_name,'1.0','1','or else is null') from dual;
--case when 语句,在语句里面也可以写正则
case 
    when xx then xx
  else null 
end as 'xx';
  • 正则函数
--regexp_like
select * from emp where regexp_like(name,'张三|李四');
--regexp_replace
select regexp_replace('张.?','张老三') from emp;
--regexp_substr 
select regexp_substr('abc 123456 cd','12' ) regexp_substr from dual;
--result:12
--regexp_instr
select regexp_instr('12.345', '\.') regexp_instr from dual; 
--result:3
--regexp_count
select regexp_count('welcome','\w')   from dual;
--result: 7
--https://blog.csdn.net/qq_43278973/article/details/118603509?spm=1001.2014.3001.5501
  • 模糊匹配函数
--like
select * from test where name like '%张%'; 
  • nvl函数
--nvl 如果第一个字段为空,取第二个字段
select nvl(name,name2) from test;
--nvl2(v1, v2, v3) 定义:如果v1为空,返回v3; 不为空,返回v2
select nvl2(v1,v2,v3) from test;
--例子
select nvl2(1, sysdate-(sysdate-1/24/60), sysdate) from dual;
select nvl2(null,sysdate-(sysdate-1/24/60), sysdate) from dual;
-- https://www.cnblogs.com/hyang0/p/10633820.html
  • 创建临时表
with 
    temp as (select * from dual),
    temp2 as (select * from temp)
select * from temp2;    

  • 行转列函数
--PIVOT
WITH TEMP AS(
SELECT DATE1,DIAG_NAME||'---'||PID AS DIAG_NAME_PID,ROW_NUMBER() OVER(PARTITION BY DATE1 
ORDER BY TO_NUMBER(PID) DESC) AS RN FROM PALAN.IN_DIAG_TOP50
)
SELECT * FROM (SELECT DATE1,DIAG_NAME_PID,RN FROM TEMP)PIVOT(MAX(DIAG_NAME_PID) FOR RN IN (

'1' AS "1",
'2' AS "2",
'3' AS "3",
-- 代码太长,此处省略(4-49)
'50' AS "50"
));

--https://blog.csdn.net/qq_43278973/article/details/120186020
举报

相关推荐

0 条评论