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上的错误
答案 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中的示例