sql总结

一、解决oracle死锁
①查看是哪个session引起的死锁 :
select b.username,b.sid,b.serial#,logon_time 
from v$locked_object a,v$session b 
where a.session_id = b.sid order by b.logon_time;
②杀掉进程 
alter system kill session 'sid,serial#'; 

二、查询某张表的某个字段是否有重复值
select count(*) from 表名 where 字段 in (select 字段 from 表名 group by 字段 having count(1) >= 2)

三、日期转换
①mysql日期转换
str_to_date(字段名,'%Y-%m-%d')='2015-04-24'
DATE_FORMAT('1997-10-04 22:23:00', '%Y-%m-%d %H:%i:%s')
②oracle日期装换
to_date('2015-01-01','YYYY-MM-DD')
to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')
③oracle date型日期
to_char(字段名,'YYYY-MM')  
to_char(字段名,'yyyy-mm-dd hh24:mi:ss') 
④mysql日期相减
select DATEdiff(STR_TO_DATE(字段1,'%Y-%m-%d'),STR_TO_DATE(字段2,'%Y-%m-%d')) n天后截止  from 表名;
datediff(字段,LOCALTIME)
日期减一天:DATE_SUB(字段名,INTERVAL 1 day) 
日期加一天:DATE_ADD(字段名,INTERVAL 1 DAY)
⑤查询2015-12份的数据
orcle:
to_number(to_char(cyrq,'YYYY'))=2015 and to_number(to_char(cyrq,'MM'))=12
mysql:
DATE_FORMAT(cfrq,'%Y')='2015' and DATE_FORMAT(cfrq,'%m')='12'

四、修改表名
ALTER TABLE old_table_name RENAME TO new_table_name;

五、oracle一张表的字段更新到另外一张表
update 表1 a set  
字段1=(select to_number(字段1) from 表2 b where a.id=b.id ),
字段2=(select to_number(字段2) from 表2 b where a.id=b.id ),
字段3=(select to_number(字段3) from 表2 b where a.id=b.id )

六、某个字段匹配全数字

^[0-9]+\.{0,1}[0-9]*$该正则表达式匹配全数字

①oracle中匹配全数字 
select * from  表名 where REGEXP_LIKE(字段, '^[0-9]+\.{0,1}[0-9]*$');
②mysql中匹配全数字
select * from  表名 where 字段 REGEXP "^[0-9]+\.{0,1}[0-9]*$";

七、查询前多少行
oracle中加条件: rownum <= 2000
mysql:select * from 表名 limit 10

sqlserver:top 2

八、mysql中删除n行数据
delete from 表名 limit  n;

九、复制表及数据

1.复制旧表的数据到新表

insert into 新表 select * from 旧表

2.只复制表结构到新表

CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2(让WHERE条件不成立)

3.复制表结构及数据到新表

CREATE TABLE 新表 SELECT * FROM 旧表

4、把所有的列插入新表(可跟where条件)

 SELECT * INTO new_table_name FROM old_tablename

5、只把希望的列插入新表(可跟where条件)

SELECT column_name(s) INTO new_table_name FROM old_tablename

十、oracle中去重
--性能较差
delete from 表名
where id in (
select id from 表名 group by id  having count  (id) > 1)  
and rowid not in (select min(rowid) from 表名 group by id having count(id )>1);
--性能较好
delete  from 表名 a
where rowid not in (
          select max(b.rowid)           
          from 表名 b
           where a.id=b.id );   

十一、mysql去掉空格字符
语法:replace(object,search,replace):把object中出现search的全部替换为replace
update `表名` set `字段名`=replace(`字段名`,' ','');

十二、统一加数据(防止主键冲突)
oracle:
1.给某列前面增加字符: 
UPDATE 表名 SET 列名='要添加的字符'||列名
2.给某列后面增加字符:
UPDATE 表名 SET 列名=列名||'要添加的字符'
mysql:
update 表名 set 列名=concat('要添加的字符',列名);

十三、oracle查询varchar型的日期
select *
  from 表名
 where 
 to_date(rq,
               case
                 when length(rq) = 7 then
                  'yyyy-MM'
                 else
                  'yyyy-MM-dd'
               end)
between to_date('2016-11-01','yyyy-MM-dd') and to_date('2016-11-30','yyyy-MM-dd')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值