Here is a simple table and test data that I will use to demonstrate my issue:
x
create table foo(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
orderpos int not null
);
insert into foo (orderpos) values (1);
insert into foo (orderpos) values (2);
insert into foo (orderpos) values (3);
insert into foo (orderpos) values (4);
insert into foo (orderpos) values (5);
I would like to update some fields with a query like this:
update foo
set orderpos =
CAST(
CASE
WHEN id = 2 THEN 4
WHEN id = 3 THEN 8
END
AS INTEGER
)
where id in(2, 3);
However I get the error
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTEGER
)
where id in(2, 3)'
I understand that by removal of a CAST query will work but I would like to understand why is this operation not permitted?
MySQL is 5.6 Here is the link to fiddle http://sqlfiddle.com/#!9/420d7f
Advertisement
Answer
It’s true you don’t need to use CAST() in this case.
But for the record, the error is because you’re using INTEGER
in a position where it is not supported by the syntax.
OK:
CAST(<expr> AS SIGNED)
CAST(<expr> AS SIGNED INTEGER)
CAST(<expr> AS UNSIGNED)
CAST(<expr> AS UNSIGNED INTEGER)
WRONG:
CAST(<expr> AS INTEGER)
See documentation for CAST()
and CONVERT()
to read about the supported data type syntax: https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html