首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法使用csv中的MySQL处理列?

问有没有办法使用csv中的MySQL处理列?
EN

Stack Overflow用户
提问于 2021-05-11 07:12:33
回答 1查看 32关注 0票数 1

我有一个csv文件,它有一个ipv4网络和掩码,格式如下: 41.74.160.0/20

我想把它分成网络长整型和广播型长整型,这样我就可以检查在这个范围内的其他长整型,以便从另一个表中进行匹配。到目前为止,我只是将它存储为一个字符串,因为INET_ATON接受一个字符串,但我最近发现它不支持掩码。我还一直使用LOAD DATA INFILE作为我的解决方案,以便轻松获取表中的所有数据。

然而,在这个新的解决方案中,我的表中的列显然与我的数据中的列不匹配。有没有办法在MySql中从csv文件中加载数据并对列进行处理?如果不是,有没有一种简单的方法可以用PHP做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 08:46:13

MySQL可以预处理来自CSV文件的输入,如果我理解了您的需求,这是一个简单的字符串操作问题。SUBSTRING_INDEX()可以根据/作为分隔符提取IP地址和掩码。

从下表开始:

代码语言:javascript
复制
CREATE TABLE `ipAddresses` (
  `id` int NOT NULL AUTO_INCREMENT,
  `ipComplete` varchar(45) NOT NULL,
  `ipAddress` varchar(45) NOT NULL,
  `ipMask` varchar(45) NOT NULL,
  `fieldName` varchar(45) NOT NULL,
  `inetNumeric` bigint NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=InnoDB;

和这个CSV输入:

代码语言:javascript
复制
"A field 1",41.74.160.0/20
"A field 2",41.74.160.1/20
"A field 3",41.74.160.2/20
"A field 4",41.74.160.3/20

此查询:

代码语言:javascript
复制
load data infile '/sqlfiles/ips.csv' into table ipAddresses 
    columns terminated by ',' 
    enclosed by '"' 
    lines terminated by '\n'
    (fieldName, @ip) 
    set ipComplete = @ip, 
        ipAddress = substring_index(@ip,'/',1), 
        ipMask = substring_index(@ip,'/',-1), 
        inetNumeric = inet_aton(substring_index(@ip,'/',1));

结果如下:

代码语言:javascript
复制
# id    ipComplete      ipAddress    ipMask fieldName   inetNumeric
29      41.74.160.0/20  41.74.160.0  20     A field 1   692756480
30      41.74.160.1/20  41.74.160.1  20     A field 2   692756481
31      41.74.160.2/20  41.74.160.2  20     A field 3   692756482
32      41.74.160.3/20  41.74.160.3  20     A field 4   692756483
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67478675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档