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的行数