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  from  t limit 1,1;
+ ------+
| a    |
+ ------+
| YNZ  |
+ ------+ 

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

import  re
import  os
 
 
def  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()

猜你喜欢

转载自www.linuxidc.com/Linux/2018-01/150619.htm