千家信息网

mysql 中获取字段中特定位置的值

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,mysql 中获取字段中特定位置的值例如有如下两条数据:mysql> select * from t;+--------------------------+| name
千家信息网最后更新 2025年02月02日mysql 中获取字段中特定位置的值

mysql 中获取字段中特定位置的值

例如有如下两条数据:

mysql> select * from t;+--------------------------+| name                     |+--------------------------+| 江苏 盐城 大丰区         || 盐城 机场代码(YNZ)       |+--------------------------+

想要获取到以空格分隔的第三列数据,可以使用substring_index() 函数

mysql> select substring_index(name,' ',-1) as addr from t limit 1;+-----------+| addr      |+-----------+| 大丰区    |+-----------+

substring_index(列名,分隔符,索引),索引指从第几个字符开始,-表示倒序,第一个位置从1开始,不是0

想要获取括号中的数据使用sql语句可以这样做:

mysql> select substring_index(substring_index(name,'(',-1),')',1) as a from t limit 1,1;+------+| a    |+------+| YNZ  |+------+


当字段中值比较复杂时,可以写脚本处理,python 库中有很多处理数据的模块,下面是自己之前写的脚本的一部分

import reimport osdef main():    """此处将数据库结果存储成文件(由于是异构数据库,没有安装驱动,    如果是mysql数据库可直接连接数据库读数据),字段以','分隔,也可以使用其他分隔符"""    with open('C:/Users/user/Desktop/1.txt', 'r') as f:        while 1:  # 死循环            line = f.readline()  # 一次读一行            if not line:  # 没有数据时退出                break            server_room, host, wip, lip, server_role_id, raid, cpu, disk, cip, provider, model, mem, os, os_version, tip, port, vip, p_version = line.split(',')            # 将行分隔成字段            # port store            try:                vip = re.split('(|\(|)|\)|\||,', vip)  # 清洗数据,去除vip字段中的'()','|'等符号,生成列表                while '' in vip:                    vip.remove('')  # 移除''字符                while ' ' in vip:                    vip.remove(' ')                    vip_w = vip[0]  # 取出第一条数据,可以进行其他的处理,例如存入文件,或直接结果存入数据库            except Exception as e:                print('error:', e)if __name__ == '__main__':    main()


0