不太常用的mysql语句

1. 通过字段之间的函数关系,计算某个字段的值(即某个字段的值,为其他字段的加减乘除的值)

比方说,你想记录员工的工作时间(worktime)和工资(salary),这两者成正比,即worktime=salary*100(常数)。如何通过工作时间直接得到工资的值呢?

一行命令行就可以啦:

update tbname set salary=worktime*100 where id='11111';

这里要注意字段的属性:是否都是int。如果是varchar的话需要转成int。下面说说mysql的字符串如何转成int。

2. 字符串转int/截取字符串某几位

字符串转int

参考:MySQL字符串的‘123’转换为数字的123 - emanlee - 博客园

三种方法如下,我觉得第三种最方便了

1. CAST('123' AS SIGNED)

2. CONVERT('123',SIGNED)

3. '123'+0

截取字符串的某几位

left(str,length):从左截

right(str,length):从右截

str: 被截的字符串,length: 截取长度

举例:比如worktime是一个四位的字符串,0410表示4个小时10分钟,0059表示59分钟

update tbname set salary=(right(worktime,2)+(left(worktime,2)+0)*60)*100 where id='11111';

(right(worktime,2)+0) 表示截取worktime从右边开始的两位,即分钟数; 

(left(worktime,2)+0)*60 表示截取worktime从左边开始的两位,即小时数,再乘60表示分钟数。

3. 提取表中某个字段的多行,把它变成一个表的某列

我之前没有考虑周全,导致原来的数据库的字段很别扭,我想要筛选出其中符合A条件的行,以及符合B条件的行(我事先知道两者的行数是相同的),将两者变成一个新表的两列,然后这两列差听起来就好复杂啊。

这是我写过的最长的mysql了,还是挺有用的。

在这个sql语句中我用到了join(同inner join),参考:mysql中join的连接方式

这个sql语句最基础的结构是:

select A.字段1, B.字段2 from 

(select 字段1 from tbname where 字段=“值”)as A join 

(select 字段2 from tbname where 字段=“值”) as B

但是这样返回的结果是所有行的排列组合,它不会把AB的每行对应起来。也就是说,假设这条语句中的A,B分别有10行,结果有100行而不是10行。所以以上的这个sql语句是不对的❌

要想把A,B每行对应起来,需要在join后面加on,加上一个能把A, B一一对应的条件。比如自增的序号。

加上on条件的sql语句:

select A.字段1, B.字段2 from

(select(@i:=@i+1)i, 字段1 from tbname, (SELECT @i:=0) as i where 字段=“值”) as A join

(select(@j:=@j+1)j, 字段2 from tbname, (SELECT @j:=0) as j where 字段=“值”) as B

on A.i=B.j;

这条语句相当于先把A, B表分别加上序号,然后利用这个序号把A,B的每行一一对应起来。得到结果的行数=A的行数=B的行数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值