MySql待整理

#ELT(n,str1,str2,str3,...) :如果n=1,则返回str1,如果n=2,则返回str2,依次类推。如果n小于1或大于参数个数,返回NULL。ELT()是FIELD()的功能补充函数。
select name,ELT(2,"地球","太阳","我") from `user` 
# result 张飞,太阳
----------------------------------------
#FIELD(str,str1,str2,str,str3,str4...):返回str 在后面的参数列(str1,str2,str,str3,str4...)中的索引,起始索引为1。如果未在参数列中发现str 则返回0
select FIELD(`name`,id,`name`,age,phone) from `user` WHERE name="张飞"
#result 1
----------------------------------------
#IFNULL(expr1,expr2):如果expr1是NULL,则返回expr2,如果expr1不是NULL,则返回expr1。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
select IFNULL(reserve,"空的") from user  WHERE name="张飞"
#result 空的
----------------------------------------
#INTERVAL(N,N1,N2,N3,...) 小于后面的某个参数,就返回这个参数的前一个位置数字
SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
#result 3 (23小于30)
-----------------------------------------
#IF(expr1,expr2,expr3) 如果 expr1 为真(expr1 <> 0 以及 expr1 <> NULL),那么 IF() 返回 expr2,否则返回expr3。IF()返回一个数字或字符
SELECT if(sex,'man','woman') sex from user
-----------------------------------------
#订单记录中存储了该订单的来源类型编码,现需将其来源名称在页面列表中展示,来源信息并未单独建表存储,现需将查询语句做出修改以达到目的
SELECT *,IFNULL(ELT(FIELD(type,'1','2','3','4'),'来源A','来源B','来源C','来源D'),'未知') name from order;


-----------------------------------------------------------------------
#流程控制函数case
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

    SELECT name
        ,
        ( CASE sex WHEN 0 THEN '女' ELSE '男' END ) sex 
    FROM
        `user`        
------------------------------
CASE
WHEN condition1 THEN returnvalue1
WHEN condition 2 THEN returnvalue2
WHEN condition 3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

    SELECT NAME
        ,
        ( CASE WHEN sex = 0 THEN '女' ELSE '男' END ) sex 
    FROM
        `user`
------------------------------
#mysql时间数据查询
-- 今天
select * from product where to_days(date)=to_days(now())
-- 昨天到今天
select*from product where to_days(now())-to_days(date)<=1
-- 7天
SELECT * FROM product where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(date)
-- 近30天
SELECT * FROM product where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(date)
-- 本月
SELECT * FROM product WHERE DATE_FORMAT( date, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
-- 上一月
SELECT * FROM product WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( date, '%Y%m' ) ) =1
-- 本季度
select * from product where QUARTER(date)=QUARTER(now());
-- 上季度
select * from product where QUARTER(date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
-- 本年
select * from product where YEAR(date)=YEAR(NOW());
-- 上年
select * from product where year(date)=year(date_sub(now(),interval 1 year));

//----------------------------------------------
#mysql 函数
replace(str,from_str,to_str)   
用字符串to_str替换字符串str中的子串from_str并返回  
select REPLACE('duaxaijun','x','i');
-- duanaijun

repeat(str,count)   
返回由count个字符串str连成的一个字符串(任何参数为null时
SELECT REPEAT('love',3);
-- lovelovelove

reverse(str)   
颠倒字符串str的字符顺序并返回 
SELECT REVERSE('过来倒')

lcase(str)  
lower(str)   
返回小写的字符串str 
select lcase('FUCK'); -- fuck 
select lower('YOU');  -- you

ucase(str)   
upper(str)   
返回大写的字符串str  


load_file(file_name)   
读入文件并且作为一个字符串返回文件内容

 update table_name set blob_column=load_file
("/tmp/picture") where id=1;  
//----------------------------------------------
#数学函数
abs(n)  
返回n的绝对值

sign(n)  
返回参数的符号(为-1、0或1)  

mod(n,m)    
取模运算,返回n被m除的余数(同%操作符)   
floor(n)  
返回不大于n的最大整数值

ceiling(n)  
返回不小于n的最小整数值 

round(n,d)  
返回n的四舍五入值,保留d位小数(d的默认值为0)  

exp(n)  
返回值e的n次方(自然对数的底)  
select exp(1)

pow(x,y)    
power(x,y)    
返回值x的y次幂  
SELECT pow(10,2);
-- 100

sqrt(n)  
 返回非负数n的平方根 

truncate(n,d)    
保留数字n的d位小数并返回 

least(x,y,...) 
返回最小值(如果返回值被用在整数(实数或大小敏感字串)上下文或所有参数都是整数(实数或大小敏感字串)则他们作为整数(实数或大小敏感字串)比较,否则按忽略大小写的字符串被比较)

greatest(x,y,...)    
返回最大值(其余同least()) 

//-------------------------------------------
# 日期时间函数
dayofweek(date)
返回日期date是星期几(1=星期天,2=星期一,……7=星期六,odbc标准)  
SELECT DAYOFWEEK(date) from product WHERE id = 1 

weekday(date)    
返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。

dayofmonth(date)    
返回date是一月中的第几日(在1到31范围内)

dayofyear(date)    
返回date是一年中的第几日(在1到366范围内) 
dayname(date)    
返回date是星期几(按英文名返回) 

monthname(date)    
返回date是几月(按英文名返回)  
mysql> select monthname("1998-02-05");    
  -> 'february'    
 
quarter(date)    
返回date是一年的第几个季度    
mysql> select quarter('98-04-01');    
  -> 2    
 
week(date,first)   
返回date是一年的第几周(first默认值0,first取值1表示周一是
周的开始,0从周日开始)  
mysql> select week('1998-02-20');    
  -> 7    
mysql> select week('1998-02-20',0);    
  -> 7    
mysql> select week('1998-02-20',1);    
  -> 8    
 
year(date)    
返回date的年份(范围在1000到9999)    
mysql> select year('98-02-03');    
  -> 1998    
 
hour(time)    
返回time的小时数(范围是0到23)   
mysql> select hour('10:05:03');    
  -> 10    
 
minute(time)    
返回time的分钟数(范围是0到59)    
mysql> select minute('98-02-03 10:05:03');    
  -> 5    
 
second(time)    
返回time的秒数(范围是0到59)   
mysql> select second('10:05:03');    
  -> 3    
 
period_add(p,n)    
增加n个月到时期p并返回(p的格式yymm或yyyymm)  

period_diff(p1,p2)    
返回在时期p1和p2之间月数(p1和p2的格式yymm或yyyymm)  

to_days(date)    
返回日期date是西元0年至今多少天(不计算1582年以前)  
mysql> select to_days(950501);    
  -> 728779    
mysql> select to_days('1997-10-07');    
  -> 729669    
 
from_days(n)    
 给出西元0年至今多少天返回date值(不计算1582年以前)   

date_format(date,format) 
mysql> select date_format('1997-10-04 22:23:00','%h:%i:%
s');  

time_format(time,format)  
 和date_format()类似,但time_format只处理小时、分钟和秒(其
余符号产生一个null值或0) 
curdate()     
current_date()  
 以'yyyy-mm-dd'或yyyymmdd格式返回当前日期值(根据返回值所
处上下文是字符串或数字)    
mysql> select curdate();    
  -> '1997-12-15'    
mysql> select curdate() + 0;    
  -> 19971215    
 
curtime()    
current_time()  
 以'hh:mm:ss'或hhmmss格式返回当前时间值(根据返回值所处上
下文是字符串或数字)      
mysql> select curtime();    
  -> '23:50:26'    
mysql> select curtime() + 0;    
  -> 235026

now()    
sysdate()    
current_timestamp()  
 以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回当前日期
时间(根据返回值所处上下文是字符串或数字)     
mysql> select now();    
  -> '1997-12-15 23:50:26'    
mysql> select now() + 0;    
  -> 19971215235026    
 
unix_timestamp()    
unix_timestamp(date)    
返回一个unix时间戳(从'1970-01-01 00:00:00'gmt开始的秒
数,date默认值为当前时间)  
mysql> select unix_timestamp();    
  -> 882226357    
mysql> select unix_timestamp('1997-10-04 22:23:00');    
  -> 875996580    
 
from_unixtime(unix_timestamp)    
以'yyyy-mm-dd hh:mm:ss'或yyyymmddhhmmss格式返回时间戳的
值(根据返回值所处上下文是字符串或数字)     
mysql> select from_unixtime(875996580);    
  -> '1997-10-04 22:23:00'    
mysql> select from_unixtime(875996580) + 0;    
  -> 19971004222300 

sec_to_time(seconds)    
以'hh:mm:ss'或hhmmss格式返回秒数转成的time值(根据返回值所处上下文是字符串或数字)     
mysql> select sec_to_time(2378);    
  -> '00:39:38'    
mysql> select sec_to_time(2378) + 0;    
  -> 3938    
 
time_to_sec(time)    
返回time值有多少秒    
mysql> select time_to_sec('22:23:00');    
  -> 80580    
mysql> select time_to_sec('00:39:38');    
  -> 2378 

//--------------------------------------
转换函数
cast
用法:cast(字段 as 数据类型) [当然是否可以成功转换,还要看数据类型强制转化时注意的问题]
实例:select cast(a as unsigned) as b from cardserver where order by b desc;
convert:
用法:convert(字段,数据类型)
实例:select convert(a ,unsigned) as b from cardserver where order by b desc;


#增加字段

ALTER TABLE product add COLUMN price BIGINT not NULL DEFAULT 1.00 COMMENT '价格' 
AFTER title
#删除字段
ALTER TABLE product DROP price 
#更改表名
ALTER TABLE product rename to products
#修改字段
ALTER TABLE product MODIFY COLUMN price BIGINT COMMENT 'jiage'
#删除表
DROP TABLE IF product1 EXISTS
#修改字段
ALTER TABLE product CHANGE price money BIGINT NOT NULL;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值