2012-04-05 184 views
3

我正在使用使用句点'。'的CSV文件。标志来表示空值。例如,有没有办法在MySQL中设置代表'n/a'的字符?

item weight unit_price 
1  5.1  10 
2  .   20 
3  7.5  30 
4  .   40 
5  2.0  50 

这是通过使用在MySQL读入的表(V 5.5):

CREATE TABLE products(
    item SMALLINT NOT NULL, 
    weight float DEFAULT NULL, 
    unit_price SMALLINT); 

LOAD DATA INFILE ".../data.txt" 
IGNORE 
INTO TABLE products 
FIELDS TERMINATED BY "," 
LINES TERMINATED BY "\r\n" 
IGNORE 1 LINES; 

的IGNORE在LOAD DATA块关键字胁迫的 ''到0 - 有没有办法,我可以将其设置为NULL而不是?

我试过唯一的解决方法是这样的:“”

LOAD DATA INFILE ".../data.txt" 
IGNORE 
INTO TABLE products 
FIELDS TERMINATED BY "," 
LINES TERMINATED BY "\r\n" 
IGNORE 1 LINES 
(item, 
@weight, 
unit_price 
) 
SET 
weight = if(@weight = '.', NULL, @weight); 

但是实际的数据,我用了超过10万行和15列,其中工作用于表示空值。有没有更简洁的方法来默认为null?

+1

下的NULL,我会去相同的替代方法。加载之后,我要做的第一件事就是对所有伪空值进行更新,并将其变为真实的空值,并与决定''的人进行认真的转换。应该和null一样。 – 2012-04-05 03:32:17

+0

谢谢,我确实考虑过在导入所有数据后运行UPDATE - 但是接下来我将不得不导入权重列作为字符字段(因为存在'。')。如果想要在权重列上使用MAX或MIN等函数,那将是不理想的。或者我错过了什么? – JConnor 2012-04-05 03:59:45

+1

我不太清楚角色字段的来源。如果您可以在该列上运行更新,只需先更新它,然后在没有任何解决方法的情况下加载数据。如果您不允许在该列上运行更新,并且需要针对该问题的快速(肮脏)解决方案,只需将其加载到您的查询中,然后尝试获取运行更新的权限即可。 – 2012-04-05 04:11:33

回答

0

在csv中使用查找和替换工具取出。并用“”(没有)替换,然后当你加载它会自动将该行放在重量列

+0

是的。我不确定其他数据库系统如何读取空值,MySQL需要数据文件使用'\ N'来表示空值 – JConnor 2012-04-29 22:32:53

相关问题