Sim, uma tabela derivada serve. O bloco de seleção interno abaixo é uma tabela derivada. E toda tabela derivada precisa de um nome. No meu caso,
xDerived
. A estratégia é deixar a tabela derivada limpar o uso do nome da coluna. Saindo do pedaço derivado é uma coluna limpa chamada
num
que a seleção externa é livre para usar. 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 |
+----+------------+------+
Observe que seu
@num
conceito estava com defeito, mas espero ter interpretado o que você quis fazer acima. Além disso, usei 7 e não 3 porque todos os seus dados de amostra teriam retornado e eu queria mostrar a você que funcionaria.