Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   like con parametros en plpgsql (https://www.clubdelphi.com/foros/showthread.php?t=81236)

puzzlemaniaco 25-10-2012 07:23:26

like con parametros en plpgsql
 
que tal amigos pues veran tengo una tabla que tiene los resgistros
alez rodriguez
derek jeter
pablo sandoval
justin verlander

Ahora haga una función que recibe un parámetro que va a ser un x nombre a buscar

Código SQL [-]
CREATE OR REPLACE FUNCTION escuela.seek_empleado(nom character varying)
nombre_completo_del_empleado like   (nom||'%' ) <------ y hago mi like asi

si mando a llamar a la función
select seek_empleado('')

se supone no me debería regresar ningún registro, sin embargo me regresa todos los registros , que estoy haciendo como puedo hacer like('alex%') peor que en vez de alex sea una variable?

olbeup 25-10-2012 09:04:53

Cita:

Empezado por puzzlemaniaco (Mensaje 447910)
que tal amigos pues veran tengo una tabla que tiene los resgistros
alez rodriguez
derek jeter
pablo sandoval
justin verlander

Ahora haga una función que recibe un parámetro que va a ser un x nombre a buscar

CREATE OR REPLACE FUNCTION escuela.seek_empleado(nom character varying)
nombre_completo_del_empleado like (nom||'%' ) <------ y hago mi like asi

si mando a llamar a la función
select seek_empleado('')

se supone no me debería regresar ningún registro, sin embargo me regresa todos los registros , que estoy haciendo como puedo hacer like('alex%') peor que en vez de alex sea una variable?

Hola puzzlemaniaco,

No entiendo de postgreSQL pero si cambias (nom||%) por (nom + '%')

Un saludo.

Casimiro Notevi 25-10-2012 10:41:30

Cita:

Empezado por puzzlemaniaco (Mensaje 447910)
.

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)


Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

roman 25-10-2012 16:24:50

Cita:

Empezado por puzzlemaniaco (Mensaje 447910)
se supone no me debería regresar ningún registro, sin embargo me regresa todos los registros

Y ¿por qué supones eso? Te está regresando todos los registros porque al pasarle una cadena vacía como parámetro la comparación queda:

Código SQL [-]
like '%'

es decir, cualquier nombre satisface la condición pues % coincide con culquier cosa.

// Saludos

gatosoft 25-10-2012 16:42:44

De acuerdo con Roman,

Intenta algo como:
Código SQL [-]
Where (campo like nom||'%' ) and (nom<>'')

olbeup 26-10-2012 09:26:33

Cita:

Empezado por gatosoft (Mensaje 447932)
De acuerdo con Roman,

Intenta algo como:
Código SQL [-]
Where (campo like nom||'%' ) and (nom<>'')

En éste caso no te saldrá nada porque estas poniendo otra condición (nom <> ''), siempre y cuando el "nom" este vacio, si tuviera alguna letra el "nom", entonces saldrá todos los empleado cuya letra empiece por "?", es decir si "nom" contiene el valor de "P" saldrán todos los empleado cuyo nombre empiecen por "P" ya que también (nom <> '')

Un saludo.

roman 26-10-2012 16:44:06

Cita:

Empezado por olbeup (Mensaje 448012)
es decir si "nom" contiene el valor de "P" saldrán todos los empleado cuyo nombre empiecen por "P" ya que también (nom <> '')

Pues, eso es lo que busca, ¿que no? :confused: Y si nom está vacio entonces la segunda condición no se cumple y no muestra ningún resultado, tal como se quiere.

// Saludos

puzzlemaniaco 05-11-2012 05:24:40

antes que nada perdón por tardar en contestar no tuve computadora donde tenia guarda esta paina y por alguna razon no me llegaron las notificaciones de respuesta a otros equipos.

Segundo no entendi lo de guia de estilo , segun yo si habia indicado que era codigo.

Tercero ya leei sus sugerencias y pues mi problema era originado por una mala concatenación, lo resolví de la siguiente manera
Código SQL [-]
like ($1||''||'%');
el $ es para indicarle a postgres que es un parámetro el 1 que es el primer parámetro || son para concatenar cadenas y % el operador propio del like.
Gracias por sus respuestas y saludos a todos los que se tomaron la molestia de leer y responder .

ToritoCapo 12-12-2012 16:08:00

Cita:

Empezado por puzzlemaniaco (Mensaje 448644)
Código SQL [-]
like ($1||''||'%');
el $ es para indicarle a postgres que es un parámetro el 1 que es el primer parámetro || son para concatenar cadenas y % el operador propio del like.
Gracias por sus respuestas y saludos a todos los que se tomaron la molestia de leer y responder .

Creo que el código tal como lo pusiste te va a traer todos los registros igual, lo único que hiciste es dejar un espacio en el medio. Te sugiero algo parecido a lo que pusieron anteriormente:
Código SQL [-]
...where empleado like $1||'%' and $1<>'';
El '%' es un comodín que completa los caracteres, en este caso, al final de la cadena, si tenemos por ejemplo:

Pablo Rodriguez
Juan Pablo Gimenez
juan pablo diaz

Si buscamos a 'Pablo' con el código que puse, nos traería a "Pablo Rodriguez"

Si agregamos el comodín también adelante.
Código SQL [-]
...where empleado like '%'||$1||'%' and $1<>'';
Y buscamos ahora a 'Pablo' el código anterior nos traería "Pablo Rodriguez" y "Juan Pablo Gimenez"

Por último si en lugar de "like" usamos "ilike" la busqueda se realiza tanto en mayúsculas como en minúsculas.
Código SQL [-]
...where empleado ilike '%'||$1||'%' and $1<>'';
Y buscamos nuevamente a 'Pablo' el código anterior nos traería "Pablo Rodriguez", "Juan Pablo Gimenez"
y juan pablo diaz.


Es mi primer aporte al foro!!!!:D:D, las anteriores fueron consultas.
Que dirán los grandes expertos v:-)v espero que les guste.

Saludos.

gatosoft 25-01-2013 16:22:13

Cita:

Empezado por ToritoCapo (Mensaje 451697)
Que dirán los grandes expertos v:-)v espero que les guste.

:cool: ejem... Pues a mi me gusta, (cof, cof) jejejejejejejejeje... :cool:

Muy bien explicado, que buen aporte...!!!

Casimiro Notevi 03-08-2016 20:13:09

http://www.clubdelphi.com/foros/guiaestilo.php


La franja horaria es GMT +2. Ahora son las 21:09:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi