# 在给商品打八八折的基础上抹掉零头
select goods_id,goods_name,floor(shop_price*0.88)
from goods where cat_id=4;
# 给每一个商品生成一个5到15元之间的随机红包,购买随机赠送红包
select floor(rand()*10+5);
select goods_id,goods_name,floor(rand()*10+5.99999) as bonus
from goods;
# 因为加5的话,返回15的概率很小,需要再调整一下。
select goods_id,goods_name,ceiling(rand()*10+5.99999) as bonus
from goods;
# ceiling 向上取整。
# 想取出第四个栏目下,所有商品的goods_id
select goods_id,cat_id from goods where cat_id=4;
# 进一步,想把4栏目下的goods_id拼接起来。
select group_concat(goods_id,',')
from goods where cat_id=4 group by cat_id;
有两个逗号的原因:group_contact 默认用逗号进行拼接
select group_concat(goods_id,'')
from goods where cat_id=4 group by cat_id;
# 字符串函数,计算字符的ASCII码
select ascii('a');
# 返回值为97;
length计算的是字节长度,char_length计算的是字符数。
create table test(
name varchar(10),
em varchar(20)
)engine myisam charset utf8;
insert into test values
('张三','zhsan@163.com'),
('lily','lily@126.com'),
('李雷','lilei@qq.com'),
('mr gao','gao@eyou.com');
# 如何调查作为邮件地址一部分的邮箱后缀?——通过字符串函数取
# 整体长度减去@ 所在位置,取右侧就是邮箱
select *,right(ema,length(ema)-position('@' in ema)) from test;
now返回datetime格式,curdate返回date格式:
dayofweek:查看某一日是一周里的第几天:
注意:周日才是一周里的第一天。
create table jiaban(
num int,
dt date
)engine myisam charset utf8;
insert into jiaban
values
(5,'2012-09-01'),
(6,'2012-09-02'),
(7,'2012-09-03'),
(8,'2012-09-04'),
(9,'2012-09-05'),
(10,'2012-09-06'),
(11,'2012-09-07'),
(12,'2012-09-08'),
(13,'2012-09-09'),
(14,'2012-09-10'),
(15,'2012-09-11'),
(16,'2012-09-12');
# 按周统计加班时间:
# 难点:group by谁?
select *,week(dt) from jiaban;
select sum(num),week(dt) as wk from jiaban group by wk;
# 加密函数:md5为例
select md5('111111');
md5 是不可逆的。
良好的加密:
1.不可逆 2.碰撞性低(不同的源码加密结果重复的可能性小)
create table test(
name varchar(5),
gender tinyint
)engine myisam charset utf8;
insert into test
values
('张三',1),
('韩梅梅',0),
('nira',2);
现在性别是数字表示,能否显示出男/女/ni,这三个字符给客户看?
即:要做判断 1->男,0->女,2->ni
—— case 值 when 某种可能 then 返回值
when 另一种可能 then 返回值
else 默认值 end 新列名
select name,case gender
when 1 then '男'
when 0 then '女'
else 'ni'
end 'gender'
from test;
最好加上那个end 后面的 ‘gender’!!否则就会出现这样的情况:
if 的语法:if(表达式1,表达式2,表达式3)
若表达式1为真,则返回表达式2,否则返回表达式3:
# 判断性别,让女士优先:
select name,
if(gender=0,'优先','等待') as vip
from test;
ifnull 的用法:判断第一个表达式是否为null ,如为null,则返回第二个表达式的值;如不为null,返回自身,即表达式1.
select ifnull('aaa',0);
user 函数返回“用户及所在主机”,判断自己的身份判断服务器版本:
在where 条件中,对某列使用了函数,由此列的索引不发挥作用。