Pesquisar por numeros que comecem

Boa noite, estou fazendo uma pesquisa com o banco de dados em java, veja:

qr = cn.prepareStatement(sql);
qr.setInt(1, codigo);

ele pesquisa certinho porém ele pesquisa apenas se a variável código for idêntica ao do banco de dados(mysql), e queria que ele pesquisa-se um exemplo se a variável código tiver o valor ‘4’ queria que ele pesquisa-se todos os números que comecem com ‘4’ também ex: 4,41,42,49, se fosse uma string a variável eu usaria “%” e estaria resolvido o problema mas do tipo int estou tendo problemas.
Grato.

Tente utilizar o LIKE na sua SQL…

Posta sua SQL para facilitar nossa ajuda…

sql = "SELECT * FROM p WHERE codigo LIKE ?";

porém nao deu

qr = cn.prepareStatement(sql);  
qr.setString(1, codigo+"%"); 

não funciona assim ?

no caso é isso qr.setInt(1, codigo); mas n da com o “%” ;/ pq é int string ate daria.

Você tem certeza que esse campo precisa ser numérico no seu banco de dados ?

Sim precisa … tentei assim tambem mas nao vingou:

sql = "SELECT * FROM p WHERE codigo LIKE "+codigo+"%";

isso não vai funcionar, cara…

o like só vai funcionar com atributos Varchar se eu não me engano…

você pode ter que fazer cast dele na query de alguma forma.

algo como isso:

WHERE CAST(colname as VARCHAR(10)) LIKE '123%'

mas não sei se isso é ANSI… não garanto nada hehehe

é infelizmente também não deu certo ;/

sql = "SELECT * FROM p WHERE CAST(codigo as VARCHAR(10)) LIKE "+codigo+"%";

se você estiver usando preparedStatement não pode deixar o % na sua query.

outra coisa… não quero me intrometer heheh… mas se não for confidencial, você poderia falar o que esse campo guarda? você faz operações matemáticas com esse valor?

N pode ser varchar o campo codigo por varios motivos um deles é que o campo é auto increment.

Entendi…

desculpa, é que nunca vi ninguém fazer uma busca desse tipo em um campo auto-increment

Bom dia.

Ao que eu sei, LIKE só funciona com Strings, portanto, precisa de um tratamento “especial” para inteiros. Uma opção, que acredito que funcione, é algo do tipo:

SELECT * FROM p WHERE CAST(codigo AS TEXT) LIKE '123%'

Ou em código seria

String sql = "SELECT * FROM p WHERE CAST(codigo AS TEXT) LIKE '"+codigo+"%'";

É para funcionar colega, tente.