Foros aprenderaprogramar.com

Aprender a programar => De todo un poco... => Mensaje iniciado por: PATZZZAAVR en 21 de Noviembre 2014, 18:39

Título: SQL encontrar registros entre dos letras between o expresiones regulares REGEXP
Publicado por: PATZZZAAVR en 21 de Noviembre 2014, 18:39
Buenas gente ¿cómo andan?

Estoy usando Java. Quisiera saber como traer de la base de datos los parámetros que envió de la forma que quiero, osea, yo tengo un JTextfield = nombre1 y otro JTextfield = nombre 2, ejemplo nombre1 = a nombre2 = j, eso envió por un método SQL que seria esto:

Código: [Seleccionar]
public static ArrayList<Cliente> consultarClienteNombre(String filtro, String filtro2)
throws Exception {
String sql = "SELECT * FROM cliente WHERE cli_nombre ILIKE '%"+filtro+"%' AND cli_nombre ILIKE '%"+filtro2+"%'  ";
ControladorBD.addSql(sql);
ControladorBD.execute();
Cliente cli = null;
ArrayList<Cliente> listaCliente = new ArrayList<>();
while (ControladorBD.finRecordSet()) {
cli = new Cliente();
cli.setCodigo(ControladorBD.getInt("cli_codigo"));
cli.setNombre(ControladorBD.getString("cli_nombre"));
cli.setCedula(ControladorBD.getInt("cli_cedula"));
cli.setRuc(ControladorBD.getString("cli_ruc"));
cli.setTelefono(ControladorBD.getString("cli_telefono"));
listaCliente.add(cli);
}
return listaCliente;

}


El problema no es que no me traiga nada si no que me trae todos los registros que contengan dichas letras enviadas, yo quisiera que me traiga los registros que están en el rango de "a" hasta "j " y en orden y ahí es donde no se como hacer. Por si alguien sepa como ayudarme le agradeseria mucho.
Título: Re:SQL encontrar registros entre dos letras between o expresiones regulares
Publicado por: Ogramar en 21 de Noviembre 2014, 21:30
Hola, tienes que hacer consultas que pueden ser:

SELECT *
FROM   cliente
WHERE  cli_nombre LIKE 'a%' OR
       cli_nombre LIKE 'b%' OR
       cli_nombre LIKE 'c%' OR
       cli_nombre LIKE 'd%' OR
       cli_nombre LIKE 'e%' OR
   cli_nombre LIKE 'f%' OR
   cli_nombre LIKE 'g%' OR
   cli_nombre LIKE 'h%' OR
   cli_nombre LIKE 'i%' OR
   cli_nombre LIKE 'j%'


O usando expresiones regulares:

SELECT *
FROM   cliente
WHERE  cli_nombre REGEXP '^[a-j]';

Podrías intentarlo con between pero aquí seguramente fallaría si tuviera que entremezclar eñes por ejemplo:

SELECT *
FROM   cliente
WHERE  cli_nombre BETWEEN 'a%' AND 'j%'



Te recomiendo que hagas pruebas primero por si acaso.

Salu2
Título: Re:SQL encontrar registros entre dos letras between o expresiones regulares
Publicado por: PATZZZAAVR en 21 de Noviembre 2014, 21:44
Buenas Ogramar, probe las 2 ultimas formas, con el BETWEEN no me trae nada y con el REGEXP no dice: ERROR: syntax error at or near "REGEXP", que le hago? :(
Título: Re:SQL encontrar registros entre dos letras between o expresiones regulares
Publicado por: Ogramar en 21 de Noviembre 2014, 21:50
La sintaxis depende de la base de datos que estés usando (¿qué base de datos es?). Una forma de comprobar la sintaxis es acceder al gestor de base de datos y ejecutar directamente la consulta comprobando los resultados. Una vez tengas la sintaxis chequeada en el gestor, trasládalo al código y comprueba que obtienes los mismos resultados  :D
Título: Re:SQL encontrar registros entre dos letras between o expresiones regulares
Publicado por: PATZZZAAVR en 21 de Noviembre 2014, 21:53
Yo uso PostgreSQL