MySQL —将T1中的VARCHAR值插入T2中的DECIMAL字段
|
在表_1中,我从电子表格中导入了数据。在一个表格列中,存在混合值:94.7、45.0、36,汽车,公交车...等。数据类型为VARCHAR(10)
我想将Table_1中此列的值插入Table_2中的DECIMAL(5,1)字段中。我希望将非数字值注册为0.0。这个很重要。
我已经尝试了多种方法,包括在我的MySQL GUI中可以使用的CAST(),但给出了一系列警告。这是我尝试过的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警告示例。
警告代码:1366不正确的十进制
值:-1行第\'\'列的\'\'
警告代码:1292被截断
DECIMAL值不正确:\'house \'
而且,PHP将一无所有。当我尝试使用PHP运行相同的查询时,出现以下致命错误消息:
不正确的十进制值:列的\'\'
-1行的\'\'
谢谢你的建议
没有找到相关结果
已邀请:
2 个回复
妒垮
,可以使用
,这可能会更快。 一种执行此操作的方法(尽管我不知道它是否是最好的;对于大型数据集来说可能有点慢)是使用正则表达式:
假设
的十进制值中没有空格。如果可能的话,您可以按以下方式使用
:
剃摧庭峨僳
我使用的表有一个空白值,一个十进制值(作为VARCHAR)和单词“ house”,并且一切都按预期进行了转换。 警告可以忽略。从本质上讲,它是MySQL告诉您它试图转换无法转换的数据。例如,单词“ house”不能转换为十进制值,因此MySQL警告您(PHP也警告您)。您在MySQL GUI中看不到错误的原因是因为错误由于查询有效而被抑制。 如果要隐藏错误,可以始终在PHP调用前添加一个@符号(即@ mysqli-> query(\'... \'),使用ini_set(\'display_errors \',false)来禁用所有错误或error_reporting(E_NONE)。