zoukankan      html  css  js  c++  java
  • 【MySQL用法】mysql如何进行以,分割的字符串的拆分

    目录

    1、需求

    2、实现(sql语句)

    3、原理分析

    3.1、SUBSTRING_INDEX(str,delim,count)函数

    3.2、LENGTH(str)函数

    3.3、REPLACE(str,from_str,to_str)函数


    1、需求

    现有如下需求:需要将字符串(电脑IP)

    192.168.211.35

    拆分成

    192

    168

    211

    35

    2、实现(sql语句)

    SELECT
        SUBSTRING_INDEX( SUBSTRING_INDEX( t.ip, '.', h.help_topic_id + 1 ), '.', - 1 )
    FROM
        test.test t
        JOIN mysql.help_topic h ON h.help_topic_id < ( LENGTH( t.ip ) - LENGTH( REPLACE ( t.ip, '.', '' )) + 1 );

      

    3、原理分析

    这里用到Mysql的SUBSTRING_INDEX(str,delim,count)函数,LENGTH(str)函数,REPLACE(str,from_str,to_str)函数,和数据库的一张辅助表help_topic(这张表在默认的mysql库里)。

    3.1、SUBSTRING_INDEX(str,delim,count)函数

    参数:

    str: 要分割的字符串

    delim: 分割符(比如逗号,和点.)

    count: 计数(分割到第几个),正数表示从左向右数,负数表示从右向左数

    例如:

    SELECT SUBSTRING_INDEX('www.baidu.com','.',1); -- 得到www
    
    SELECT SUBSTRING_INDEX('www.baidu.com','.',2); -- 得到www.baidu
    
    SELECT SUBSTRING_INDEX('www.baidu.com','.',-1); -- 得到com
    
    SELECT SUBSTRING_INDEX('www.baidu.com','.',-2); -- 得到baidu.com

    想要得到中间的baidu怎么办?这个要取两次才能得到的(也可以这么理解,一次从右向左取,一次从左向右取,哈哈,这个比较绕哈),第一次从右向左取,如上例子得到baidu.com,第二次将第一次的结果从左向右取,即可得到中间的字符baidu。

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.baidu.com','.',-2),'.',1); -- 得到baidu

    有了这个函数的帮助,还需要确定什么呢?需要确定,当前要分割的位置。

    如何来获取当前要分割的位置呢?可以先获取总共能拆分成多少个字符串:

    SELECT LENGTH('192.168.211.35'); -- 得到长度是14

    3.2、LENGTH(str)函数

    LENGTH(str) -- MYSQL的LENGTH(str)函数,统计字符串的长度

    3.3、REPLACE(str,from_str,to_str)函数

    REPLACE(str,from_str,to_str) -- MYSQL的REPLACE(str,from_str,to_str)函数,意思是替换字符串,用to_str替换from_str得到最终的str

    参数:

    str:最终得到的字符串

    from_str: 旧的字符(被替换的字符)

    to_str: 新的字符

    结果就是用新的字符替换旧的字符,得到的最终的字符串

    SELECT REPLACE('192.168.211.35','.',''); -- 得到19216821135
    
    SELECT LENGTH(REPLACE('192.168.211.35','.','')); -- 得到长度是11

    最终呢,SELECT LENGTH('192.168.211.35') - LENGTH(REPLACE('192.168.211.35', ',', '')) + 1;  -- 得到长度是4

    那么其实我们想要的就是遍历前三个,分别获取当前位置的字符串:

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('192.168.211.35',',', index), ',', -1)

    其中index就是我们要遍历的位置,所以为了遍历,我们需要一个关联一个辅助表来得到当前位置,最后的设计如下:

    SELECT
        SUBSTRING_INDEX( SUBSTRING_INDEX( t.ip, '.', h.help_topic_id + 1 ), '.', - 1 )
    FROM
        test.test t
        JOIN mysql.help_topic h ON h.help_topic_id < ( LENGTH( t.ip ) - LENGTH( REPLACE ( t.ip, '.', '' )) + 1 );

    需求最终得以实现:

    我的测试数据库里表的内容是:

    完结!

  • 相关阅读:
    测试心得
    mysql学习整理
    测试思考
    Win7下安装Mysql方法
    xcall.sh
    hive 的几款可视化连接工具
    mongo 使用 mongoexport 按照条件导出 csv 文件
    WebFlux springboot 2.0
    Calendar java  日历(常用小结)
    java 自定义注解(3)
  • 原文地址:https://www.cnblogs.com/no8g/p/13415580.html
Copyright © 2011-2022 走看看