一、解决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')