在表 1 中,我从电子表格中导入了数据。在一个表列中有混合值:94.7、45.0、36、汽车、公共(public)汽车……等。数据类型为 VARCHAR(10)
我想将 Table_1 中该列的值插入到 Table_2 中的 DECIMAL(5,1) 字段中。我希望非数字值注册为 0.0。这很重要。
我已经尝试了几种方法,包括 CAST(),它可以在我的 MySQL GUI 中运行,但会给出一长串警告。这是我尝试过的 SQL 类型的示例。
DELETE FROM table_2;
INSERT INTO table_2 (NAME, decimal_column)
(SELECT NAME
, CAST(varchar_column AS DECIMAL(5,1))
FROM table_1) ;
MySQL 警告示例。
Warning Code : 1366 Incorrect decimal value: '' for column '' at row -1
Warning Code : 1292 Truncated incorrect DECIMAL value: 'house'
另外,PHP 也没有。当我尝试使用 PHP 运行相同的查询时,我收到了这条 fatal error 消息:
Incorrect decimal value: '' for column '' at row -1
谢谢你的建议
最佳答案
如果您正在清除 table_2
,您可以使用 TRUNCATE table_2;
,这可能会更快。
一种方法(虽然我不知道它是否最好;对于大型数据集来说它可能有点慢)是使用正则表达式:
INSERT INTO table_2 (NAME, decimal_column)
(SELECT NAME
, IF(varchar_column REGEXP '^[[:digit:].]+$', varchar_column, 0.0)
FROM table_1) ;
这是假设 varchar_column
的十进制值中没有空格。如果可能的话,您可以按如下方式使用 TRIM
:
IF(TRIM(varchar_column) REGEXP '^[[:digit:].]+$', TRIM(varchar_column), 0.0)
关于php - MySQL -- 将 T1 中的 VARCHAR 值插入到 T2 中的 DECIMAL 字段中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6325975/