仅在适用的情况下如何从字符串列强制转换和更新数值

时间:2019-02-05 07:34:41

标签: mysql

MYSQL:尝试使用演员表更新varchar列时出现错误代码1292

我需要从其他varchar列的值更新一列。当有非整数值(例如“ N / A”)时,我希望它填充为0,否则取该值。到目前为止,这是我尝试过的:

update mytable
SET ColumnB =
case when concat('',columnA*1) = columnA
then cast(columnA AS UNSIGNED)
else 0
end
where Row_ID = 1;

我希望它填充为整数值或0。但是,我遇到了以下错误: Error Code: 1292. Truncated incorrect DOUBLE value: 'N/A'

Sample columnA values: 1,2,3,N/A,0, ,N/A ColumnB should be: 1,2,3,0,0, ,0

表结构,样本值,小提琴here上的错误

2 个答案:

答案 0 :(得分:2)

检查此内容:

create table mytable
(
  columnA varchar(10),
  columnB double
);
insert into mytable values ('15.2', null);
insert into mytable values ('15', null);
update mytable
  SET ColumnB =
    case when ceil(columnA) = columnA
    then  ceil(columnA)
    else 0
    end
select * from mytable
columnA | columnB
:------ | ------:
15.2    |       0
15      |      15

db <>提琴here

为您的数据:

 update mytable
  SET ColumnB =
    case when REGEXP_LIKE(columnA,'^\\d+(\\.\\d+)?$')
    then  floor(columnA*1)
    else 0
    end

答案 1 :(得分:1)

您可以使用CEIL函数,将包含整数的值转换为整数,将包含字符串的值转换为0

例如:

SELECT CEIL('10'); // return 10
SELECT CEIL('N/A'); // return 0

完整查询如下:

UPDATE mytable
SET ColumnB = CEIL(columnA)
WHERE Row_ID = 1;

如果columnA具有varchar类型,则必须将其强制转换为CHAR。例如:

UPDATE mytable
SET columnB = CEIL(CAST(columnA AS CHAR(5)))
WHERE Row_ID = 1;

DBFidle中的示例