将 csv 文件导入 mysql 时,是否可以将字符串转换为浮点数?
Is it possible to convert string into float when importing a csv file into mysql?
He.llo,伙计们
我正在学习 SQL 作为一项实践练习,我正在尝试从我国的政府数据库中导入 .csv 文件。
基本上它是一个包含 4 行的文件:
日期、硬币名称、价值、数量和 这些行的格式不符合我的需要 。
日期可以,是 YYYY-MM-DD
币名也可以,因为它是一个字符串
价值(硬币价值,如 0.1 或 10)也可以,因为它的格式只有点
数量问题
数量是多少coins/notes可供公民使用,但是用点和逗号格式化(这是我想不通的真正问题)
举个例子:
1995-01-02;莫达斯 - 1a。家庭 (inox);0.01;834.342.314,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.05;636.711.876,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.10;583.076.666,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.25;146.883.388,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.50;329.791.540,00
有什么方法可以将数量(例如:329.791.540,00)转换为浮点数吗?
谢谢!
----- 编辑 01:17 GMT
我应用 REPLACE 作为 Marco 对整个 table
说
SELECT data_,nome,valor,CAST(REPLACE(REPLACE(qntd,'.',''),',','.') AS FLOAT) AS qntd
FROM indata;
这是正确的吗?但即使它是正确的,也没有用,值是
5.890.789.013,00 -> 5890790000
好像被围起来了
-------- 编辑01:39格林威治标准时间
当我更改 FLOAT -> DOUBLE 时它起作用了,有人知道为什么吗?
注意 qnty 字段的记录最多可达十亿
使用REPLACE()
字符串函数,两次;一次用空替换点,一次用点替换小数点逗号,然后将该表达式转换为浮点数 - 就像在这个使用该格式的第一个文字的小演示示例中一样:
WITH indata(s) AS (
SELECT '834.342.314,00' FROM dual
)
SELECT
CAST(REPLACE(REPLACE(s,'.',''),',','.') AS FLOAT) AS f
FROM indata;
-- out f
-- out -----------
-- out 834342314
试试这个。
SELECT
data_,
nome,
valor,
CAST( REPLACE ( REPLACE ( qntd, '.', '' ), ',', '.' ) AS DECIMAL ( 12, 2 ) ) AS qntd
FROM
indata;
He.llo,伙计们
我正在学习 SQL 作为一项实践练习,我正在尝试从我国的政府数据库中导入 .csv 文件。
基本上它是一个包含 4 行的文件: 日期、硬币名称、价值、数量和 这些行的格式不符合我的需要 。
日期可以,是 YYYY-MM-DD
币名也可以,因为它是一个字符串
价值(硬币价值,如 0.1 或 10)也可以,因为它的格式只有点
数量问题 数量是多少coins/notes可供公民使用,但是用点和逗号格式化(这是我想不通的真正问题)
举个例子:
1995-01-02;莫达斯 - 1a。家庭 (inox);0.01;834.342.314,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.05;636.711.876,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.10;583.076.666,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.25;146.883.388,00
1995-01-02;莫达斯 - 1a。家庭 (inox);0.50;329.791.540,00
有什么方法可以将数量(例如:329.791.540,00)转换为浮点数吗?
谢谢!
----- 编辑 01:17 GMT
我应用 REPLACE 作为 Marco 对整个 table
SELECT data_,nome,valor,CAST(REPLACE(REPLACE(qntd,'.',''),',','.') AS FLOAT) AS qntd
FROM indata;
这是正确的吗?但即使它是正确的,也没有用,值是
5.890.789.013,00 -> 5890790000
好像被围起来了
-------- 编辑01:39格林威治标准时间
当我更改 FLOAT -> DOUBLE 时它起作用了,有人知道为什么吗?
注意 qnty 字段的记录最多可达十亿
使用REPLACE()
字符串函数,两次;一次用空替换点,一次用点替换小数点逗号,然后将该表达式转换为浮点数 - 就像在这个使用该格式的第一个文字的小演示示例中一样:
WITH indata(s) AS (
SELECT '834.342.314,00' FROM dual
)
SELECT
CAST(REPLACE(REPLACE(s,'.',''),',','.') AS FLOAT) AS f
FROM indata;
-- out f
-- out -----------
-- out 834342314
试试这个。
SELECT
data_,
nome,
valor,
CAST( REPLACE ( REPLACE ( qntd, '.', '' ), ',', '.' ) AS DECIMAL ( 12, 2 ) ) AS qntd
FROM
indata;