| 您的当前位置:首页 --> MYSQL教程 |
| 日常收集整理常见的mysql sql技巧 |
| 浏览次数:1326 关键词 ( ) |
|
废话不多说了,直接给大家贴代码了。 1,数字辅助表 //创建表 create table test(id int unsigned not null primary key); delimiter // create procedure pnum(cnt int unsigned) begin declare i int unsigned default 1; insert into num select i; while i*2 < cnt do insert into num select i+id from num ; set i=i*2; end while; end // delimiter ; #####列值不连续问题: 表a中id值为1,2,3,100,101,110,111 set @q=0; select id,@q:=@q+1 as cn from a; #####对不连续的进行分组 set @a=0; select min(id) as start_v,max(id) as end_v from ( select id,cn,id-cn as diff from ( select id,@a:=@a+1 as cn from pi) as p ) as pp group by diff; #####对不连续的值填充 use test; DROP TABLE if EXISTS pincer; create table pincer(a int UNSIGNED); insert into pincer values(1),(2),(5),(100),(101),(103),(104),(105); select a+1 as start ,(select min(a)-1 from pincer as ww where ww.a>qq.a) as end from pincer as qq where not exists (select * from pincer as pp where qq.a+1=pp.a) and a<(select max(a) from pincer); ################ select id,num,ranknum,diff from (select id,num,ranknum,num-ranknum as diff from (select id,num,if(@id=id,@rownum:=@rownum+1,@rownum:=1) ranknum,@id:=id from tt,(select @rownum:=0,@id:=null) a ) b) c group by id,diff having count(*)>=2; ################ 2,生日问题 select name,birthday,if(cur>today,cur,next) as birth_day from( select name,birthday,today,date_add(cur,interval if(day(birthday)=29 && day(cur)=28,1,0) day)as cur, date_ad(next,interval if(day(birthday)=29 && day(next)=28,1,0) day) as next from( select name,birthday,today, date_add(birthday,interval diff year) as cur, date_add(birthday,interval diff+1 year) as next, from( select concat(laster_name,'',first_name) as name, birth_date as birthday, (year(now())-year(birth_date) )as diff, now() as today from employees) as a ) as b ) as c 3,日期问题----计算工作日
create table sals(id int ,date datetime ,cost int,primary key(id);
select date_add('1900-01-01',
interval floor(datediff(date,'1900-01-01')/7)*7 day)
as week_start,
date_add('1900-01-01',
interval floor(datediff(date,'1900-01-01')/7*7+6 day)
as week_end,
sum(cost) from sales;
计算工作日(指定2个日期段 有多少工作日)
create procedure pgetworkdays (s datetime,e datetime)
begin
select floor(days/7)*5+days%7
case when 6 between wd and wd+days%7-1 then 1 else 0 end
case then 7 between wd and wd+days%7-1 then 1 else 0 end
from
(select datediff(e,s)+1 as days,weekday(s)+1 as wd) as a;
end;
mysql sql语句大全 1、说明:创建数据库 2、说明:删除数据库 drop database dbname 3、说明:备份sql server 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 5、说明:删除新表 drop table tabname 6、说明:增加一个列 7、说明:添加主键: Alter table tabname add primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement 删除视图:drop view viewname 10、说明:几个简单的基本的sql语句 11、说明:几个高级查询运算词 12、说明:使用外连接 A、left (outer) join: 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后接表明,附加需要完整的路径名 14.如何修改数据库的名称: sp_renamedb 'old_name', 'new_name' |
| 下载次数:35 |
| 下载地址:点击下载 |
| 本资源为程序自动采集,如有侵权请联系我们移除 admin#80vps.com 来信请将#替换为@ |
| 下一条 SQL计算timestamp的差值的方法 上一条 MySQL如何清空慢查询文件 |