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 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()
来源: http://www.linuxidc.com/Linux/2018-01/150619.htm