zoukankan      html  css  js  c++  java
  • MySql中指定符号分割并分行展示

    1.涉及到的函数三个:

    1.1 REPLACE('value','str1','str2')

     用法规则:使用str2替换掉value中的所有的str1;

    SELECT REPLACE('我来了','','')

    执行结果如下:

     1.2 LENGTH(str)

     用法规则:获取字符串的长度,使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节。

    SELECT LENGTH('我来了'),LENGTH('you')

    执行结果如下:

    1.3 SUBSTRING_INDEX(str,delim,count)

     用法规则:substring_index(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N(截取数据依据的字符出现的次数))

    如果count是正数则从左往右截取,如果count是负数则从右往左截取,count是从1开始的不存在0,否则查询结果为空;

    SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',1) 
    -- 以第一个逗号为分割,截取第一个字符串

    执行结果如下:

    SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',2)
    -- 以第二个逗号为分割,截取前两个字符串

    执行结果如下:

    SELECT SUBSTRING_INDEX('我,是,菜,鸡',',',-2)
    -- 从右往左数第二个逗号为分割,截取两个字符串

    执行结果如下:

    案例:

    现有一张table1表,表中信息如截图,需要将表中的roles字段中的值按照‘,’分割,并且每个字符串展示为1行:

     实现的sql如下:

    SELECT
        a.owner_type,SUBSTRING_INDEX( SUBSTRING_INDEX( a.roles, ',', b.help_topic_id + 1 ), ',',- 1 ) 
    FROM
        table1 a
        JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.roles ) - LENGTH( REPLACE ( a.roles, ',', '' ) ) + 1 );

    执行结果:

     案例语句分析:

    SUBSTRING_INDEX(SUBSTRING_INDEX(a.roles,',',b.help_topic_id + 1),',',-1)

    在mysql.help_topic表中help_topic_id的值是(0,1,2······N),是从零开始的,SUBSTRING_INDEX(str,delim,count)中的count位置函数必须是从1开始,所以需要(b.help_topic_id + 1)从1开始循环,当help_topic_id 值为0时以上语句取值为第一个字符串,当help_topic_id 值为1是以上语句执行后取第二个字符串,如截图:

    以下sql字段执行结果求的是roles的值可以按照 ' , ' 被分割为多少个字符串:

    (LENGTH(a.roles) - LENGTH(REPLACE(a.roles,',','')) + 1 )

    执行后的结果如截图:

     至于如何使用join进行循环的这里就不多做描述,可以百度下join的使用讲解^-^。。。。。。。

  • 相关阅读:
    on和where的区别
    分组查询 group by having 排序 order by asc(升序)或desc(降序)
    连接查询 left join on, union
    md5加密方法
    where查询条件的指定,between and,in,like
    Mapnix(转) Anny
    Rolebased access control(RBAC) Anny
    TestComplete如何识别对象(转) Anny
    Jira workflow Anny
    crx文件 Anny
  • 原文地址:https://www.cnblogs.com/AIHEN/p/13968653.html
Copyright © 2011-2022 走看看