mysql中给查询结果添加序号列、对某个字段进行截取、对序列号进行截取

给查询结果添加序列号

生成一个字段(非表中字段)用以记录排序 【类比为oracle数据库中的rownum】

MySQL中一个表(表名:stuscore)

字段有:id(主键)、stuid(学号)、sname(学生姓名)、subject(课程名称)、score(分数)

列出数学成绩排名 (要求显示字段:排名,姓名 , 课程名称, 分数 , 学号)

用于排名的字段,查询时此处将其用 pm表示

select (@i:=@i+1)pm,s.* from stuscore s,(select @i:=0)t where s.subject=‘数学’

order by score desc;

思想:事先定义一个变量,通过变量的递加以及虚拟表的联查达到生成序列号的目的。

select * from table1,table2 不加任何条件时,是把两个表的数据笛卡尔积之后显示,

如上sql中的 t 这张表 其实就是 一条 i=0 的数据

mysql存储过程中,定义变量有两种方式:

1、使用set或select直接赋值,变量名以 @开头

赋值符号:使用set 时可以用 “=“或者“:=” 但是使用select赋值时必须使用“:=”赋值

例如: set@id=1;

可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量。

mysql总变量不用事先声明,在用的时候直接用@变量名 使用即可

【先行记录】

2、以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:
     DECLARE var1 INT DEFAULT 0;

主要用在存储过程中,或者是给存储传参数中

两者的区别是:

在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL。而会话变量(即@开头的变量)则

不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在

是这个会话内的全局变量。

在存储过程中,使用动态语句,预处理时,动态内容必须赋给一个会话变量。
    例:
      set @v_sql= sqltext;
      PREPARE stmt FROM @v_sql;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;

对某个字段进行截取

1、left(name,4)截取左边的4个字符

列:

SELECT LEFT(201809,4) 年

结果:2018

2、right(name,2)截取右边的2个字符

SELECT RIGHT(201809,2) 月份

结果:09

3、SUBSTRING(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符

SELECT SUBSTRING(‘成都融资事业部’,5,3)

结果:事业部

4、SUBSTRING(name,3) 截取name这个字段 从第三个字符开始,之后的所有个字符

SELECT SUBSTRING(‘成都融资事业部’,3)

结果:融资事业部

5、SUBSTRING(name, -4) 截取name这个字段的第 4 个字符位置(倒数)开始取,直到结束

SELECT SUBSTRING(‘成都融资事业部’,-4)

结果:资事业部

6、SUBSTRING(name, -4,2) 截取name这个字段的第 4 个字符位置(倒数)开始取,只截取之后的2个字符

SELECT SUBSTRING(‘成都融资事业部’,-4,2)

结果:资事

注意:我们注意到在函数 substring(str,pos, len)中, pos 可以是负值,但 len 不能取负值。

7、substring_index(‘www.baidu.com’, ‘.’, 2) 截取第二个 ‘.’ 之前的所有字符

SELECT substring_index(‘www.baidu.com’, ‘.’, 2)

结果:www.baidu

8、substring_index(‘www.baidu.com’, ‘.’, -2) 截取第二个 ‘.’ (倒数)之后的所有字符

SELECT substring_index(‘www.baidu.com’, ‘.’, -2)

结果:baidu.com

9、SUBSTR(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符

SELECT SUBSTR(‘成都融资事业部’, 1, CHAR_LENGTH(‘成都融资事业部’)-3)

结果:成都融资

将上述两个结合起来就是

select substring_index((@i:=@i+1),’.’,1) as rownum from 表名,(select @i:=0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值