Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-10-2012
puzzlemaniaco puzzlemaniaco is offline
Registrado
 
Registrado: jul 2012
Posts: 2
Poder: 0
puzzlemaniaco Va por buen camino
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?

Última edición por Casimiro Notevi fecha: 25-10-2012 a las 11:40:12.
Responder Con Cita
  #2  
Antiguo 25-10-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 674
Poder: 14
olbeup Va camino a la fama
Cita:
Empezado por puzzlemaniaco Ver Mensaje
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 25-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.660
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por puzzlemaniaco Ver Mensaje
.
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
Responder Con Cita
  #4  
Antiguo 25-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.206
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por puzzlemaniaco Ver Mensaje
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
Responder Con Cita
  #5  
Antiguo 25-10-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 757
Poder: 16
gatosoft Va camino a la fama
De acuerdo con Roman,

Intenta algo como:
Código SQL [-]
Where (campo like nom||'%' ) and (nom<>'')
__________________
gatosoft [M.40.co]
Responder Con Cita
  #6  
Antiguo 26-10-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 674
Poder: 14
olbeup Va camino a la fama
Cita:
Empezado por gatosoft Ver Mensaje
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #7  
Antiguo 26-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.206
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Cita:
Empezado por olbeup Ver Mensaje
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? Y si nom está vacio entonces la segunda condición no se cumple y no muestra ningún resultado, tal como se quiere.

// Saludos
Responder Con Cita
  #8  
Antiguo 05-11-2012
puzzlemaniaco puzzlemaniaco is offline
Registrado
 
Registrado: jul 2012
Posts: 2
Poder: 0
puzzlemaniaco Va por buen camino
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 .
Responder Con Cita
  #9  
Antiguo 12-12-2012
ToritoCapo ToritoCapo is offline
Miembro
 
Registrado: feb 2011
Posts: 14
Poder: 0
ToritoCapo Va por buen camino
Cita:
Empezado por puzzlemaniaco Ver Mensaje
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!!!!, las anteriores fueron consultas.
Que dirán los grandes expertos espero que les guste.

Saludos.
Responder Con Cita
  #10  
Antiguo 25-01-2013
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 757
Poder: 16
gatosoft Va camino a la fama
Cita:
Empezado por ToritoCapo Ver Mensaje
Que dirán los grandes expertos espero que les guste.
ejem... Pues a mi me gusta, (cof, cof) jejejejejejejejeje...

Muy bien explicado, que buen aporte...!!!
__________________
gatosoft [M.40.co]
Responder Con Cita
  #11  
Antiguo 03-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 28.660
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
http://www.clubdelphi.com/foros/guiaestilo.php
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Parametros mauqu Varios 2 06-08-2007 19:25:01
parametros en sql nikotina SQL 4 31-10-2006 12:09:17
Parametros Opcionales no Parametros por defecto Velia Varios 7 19-08-2006 16:18:42
Parametros jostrix Varios 1 31-10-2004 12:55:33
Parametros BDE Red_Delphi Conexión con bases de datos 0 13-10-2003 11:18:05


La franja horaria es GMT +2. Ahora son las 21:55:44.


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