【问题标题】:how to sum varchar values in MySQL如何在 MySQL 中对 varchar 值求和
【发布时间】:2014-01-08 16:39:12
【问题描述】:

我正在使用 Load Data infile 语句将多个文本文件加载到数据库中。尝试将数值加载到它们各自的数值字段时似乎存在问题。我做了一些研究,根据MySQL documentation,所有加载的数据都被视为文本,因此所有值都被输入为空。

LOAD DATA INFILE 将所有输入视为字符串,因此不能使用 ENUM 或 SET 列的数值,您可以使用 INSERT 的方式 陈述。所有 ENUM 和 SET 值都必须指定为字符串。

我尝试将特定字段转换为数字或小数,但我仍然在表中得到空值。

I.E.

LOAD DATA INFILE 'blabla.txt' INTO TABLE example  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES TERMINATED BY '\r\n' ignore 1 lines
(field1, field2, field3, @problemfield,)

set problemfield= cast((REPLACE(REPLACE(REPLACE(@problemfield,',',''),'(', '-'), ')','')) as DECIMAL(10,0));

我正在使用替换,因为有时数据中的括号中包含负数。

stackoverflow 上有类似的问题,关于加载时的转换,许多响应(现在找不到链接)建议作为文本加载,然后转移到新的数字字段并删除旧字段,这是最佳解决方案吗?这个问题一般是怎么处理的?因为我确信这种情况一定会发生很多(加载所有这些文本数据并对其执行操作)

【问题讨论】:

  • 您从手册中引用的引文(关于 ENUMSET 列)无关紧要。仅仅因为输入被键入为字符串不应该阻止 MySQL 在插入时正确转换为数字类型,特别是因为您正在操作(然后手动转换)字符串以使其有效。您的文件格式很可能有一些您没有处理的特殊性。你能展示一个样本摘录吗?

标签: mysql sql


【解决方案1】:

将您的数据加载到临时表中。根据需要进行操作。从您的临时表写入您的真实表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多