美文网首页
不太常用的mysql语句

不太常用的mysql语句

作者: Jessieee_Y | 来源:发表于2019-11-29 18:05 被阅读0次

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

    相关文章

      网友评论

          本文标题:不太常用的mysql语句

          本文链接:https://www.haomeiwen.com/subject/lhsdectx.html