Sí, una tabla derivada servirá. El bloque de selección interno a continuación es una tabla derivada. Y cada tabla derivada necesita un nombre. En mi caso, xDerived
.
La estrategia es dejar que la tabla derivada limpie el uso del nombre de la columna. Del fragmento derivado sale una columna limpia llamada num
que la selección externa es de uso gratuito.
Esquema
create table employee
( id int auto_increment primary key,
experience varchar(20) not null
);
-- truncate table employee;
insert employee(experience) values
('4-5'),('7-1'),('4-1'),('6-5'),('8-6'),('5-9'),('10-4');
Consulta
select id,experience,num
from
( SELECT id,experience,
CONVERT(SUBSTRING_INDEX(experience,'-',1),UNSIGNED INTEGER) AS num
FROM employee
) xDerived
where num>=7;
Resultados
+----+------------+------+
| id | experience | num |
+----+------------+------+
| 2 | 7-1 | 7 |
| 5 | 8-6 | 8 |
| 7 | 10-4 | 10 |
+----+------------+------+
Tenga en cuenta que su @num
el concepto era defectuoso, pero espero haber interpretado lo que querías hacer arriba.
Además, opté por 7 y no por 3 porque todos los datos de muestra habrían regresado y quería mostrarles que funcionaría.