You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL Workbench中导入含美元符号的货币数据?

解决方案:处理含美元符号的MySQL导入问题

一、使用LOAD DATA INFILE完整导入并转换数据

这是处理大数据集最高效的方式,直接在SQL中完成所有格式转换,无需依赖Excel。

1. 创建目标表

先创建符合业务需求的表结构,货币字段建议用DECIMAL类型(比DOUBLE/FLOAT更适合存储金额,避免浮点精度误差):

CREATE TABLE furniture_transactions (
    transaction_date DATETIME,
    transaction_id INT,
    customer_id INT,
    product VARCHAR(50),
    product_sku VARCHAR(20),
    product_color VARCHAR(50),
    product_price DECIMAL(10,2),
    quantity_purchased INT,
    purchase_total DECIMAL(10,3),
    revenue DECIMAL(10,2)
);

2. 编写导入脚本

通过临时变量接收原始字符串,再转换为目标格式:

LOAD DATA LOCAL INFILE 'Downloads/Lauren-s-Furniture-Store-Transaction-Table.csv'
INTO TABLE furniture_transactions
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' -- 若CSV字段用双引号包裹,取消注释此句
LINES TERMINATED BY '\n'
IGNORE 1 ROWS -- 跳过CSV的表头行
(
    @date_raw,
    transaction_id,
    customer_id,
    product,
    product_sku,
    product_color,
    @price_raw,
    quantity_purchased,
    purchase_total,
    @revenue_raw
)
SET
    transaction_date = STR_TO_DATE(@date_raw, '%m/%d/%Y %H:%i'),
    product_price = CAST(REPLACE(@price_raw, '$', '') AS DECIMAL(10,2)),
    revenue = CAST(REPLACE(@revenue_raw, '$', '') AS DECIMAL(10,2));

关键注意点:

  • 文件路径中的反斜杠需改为正斜杠(Windows系统也支持),若用双反斜杠需转义为\\
  • 若金额包含千分位逗号(如$1,234.56),需嵌套REPLACE处理:REPLACE(REPLACE(@price_raw, '$', ''), ',', '')
  • 确保MySQL开启了LOCAL_INFILE权限,否则无法读取本地文件

二、MySQL Workbench导入向导的处理方法

如果习惯用图形化工具导入,可在向导中设置字段转换规则:

  1. 进入导入向导的Set Data Types步骤
  2. 找到产品单价和营收列,将数据类型改为DECIMAL(10,2)
  3. 在列的Expression输入框中填写转换规则,比如REPLACE(product_price, '$', '')
  4. 继续完成后续导入流程即可

三、之前尝试失败的原因说明

  • 直接修改字段类型为数值型失败:原始数据包含$符号,MySQL无法自动将含非数字字符的字符串转换为数值
  • 使用CAST直接转换带$的字段得到0:MySQL转换字符串为数值时,会从左到右读取,遇到第一个非数字字符就停止,$13.99会被识别为0,必须先移除$再转换
  • 之前的LOAD DATA脚本无数据导入:脚本仅定义了单个字段,未匹配CSV的多列结构,且路径格式可能有误

内容的提问来源于stack exchange,提问作者Rowen Webb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:01:08