我正在使用使用句点'。'的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?
下的NULL,我会去相同的替代方法。加载之后,我要做的第一件事就是对所有伪空值进行更新,并将其变为真实的空值,并与决定''的人进行认真的转换。应该和null一样。 – 2012-04-05 03:32:17
谢谢,我确实考虑过在导入所有数据后运行UPDATE - 但是接下来我将不得不导入权重列作为字符字段(因为存在'。')。如果想要在权重列上使用MAX或MIN等函数,那将是不理想的。或者我错过了什么? – JConnor 2012-04-05 03:59:45
我不太清楚角色字段的来源。如果您可以在该列上运行更新,只需先更新它,然后在没有任何解决方法的情况下加载数据。如果您不允许在该列上运行更新,并且需要针对该问题的快速(肮脏)解决方案,只需将其加载到您的查询中,然后尝试获取运行更新的权限即可。 – 2012-04-05 04:11:33