Re: LIKE a campo integer

From: "Crispin T(dot)" <cris(dot)emis(at)gmail(dot)com>
To: Hellmuth Vargas <hivs77(at)gmail(dot)com>
Cc: Herman Estaban <hermanestaban(at)gmail(dot)com>, FORO POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: LIKE a campo integer
Date: 2016-06-21 22:27:44
Message-ID: CAMb9RiP7PJeOXLYg2gJQp3QnNGYRQQ1m4S7fTFY3tyFNr8QiVw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Hernan.

llevo mucho tiempo sin trabajar directamente con postgresql.(y sin
colaborar en la lista). asi que nose si mi idea esta bien o es pesima.

select *
from TU_TABLA_CON_ID_BIGINT
where
id_tip_reg in ( --//el campo id_tip_reg
es tu bigint en BD
select unnest(values) --//el campo values es el
alias que le das a cada valor de tu string de parametro unnest crea la
"tabla" con los valores del array
from (select
string_to_array('1,1,5,89,9,6,3,8,8,9',',')::bigint[] as values) as
parameters --//convertimos el string que te llega como parametro a
array de bigints
)

es mas o menos lo mismo que quieres hacer me imagino.... pero no casteas
todos los id's de tu bd (que por ser bigint me imagino que son miles o
millones) sino solo casteas los que llegan como parametro que me imagino
seran decenas o maximo centenas.

podrias probar la idea vs el cast del id a char y el like para ver
performance...

NOTA: me pregunto como quedaria tu like(la expresion en si) por ejemplo con
valor de id =2 y param "5,7,9,54,2,36,542,59,21"

Saludos.

2016-06-21 17:57 GMT-04:00 Hellmuth Vargas <hivs77(at)gmail(dot)com>:

> Hola Herman
>
> En ese caso, si tiene bastantes registros, la distribución es mas o menos
> heterogénea y la consulta se trata de prefijo (empieza por) podría probar:
>
> 1.Crear indice sobre la versión texto de la columna entera, ejemplo:
>
> CREATE INDEX idx_indice_patron ON tabla (CAST(ID_TIP_REG AS TEXT)
> text_pattern_ops);
>
>
> 2. verificar el funcionamiento:
>
> WHERE CAST(ID_TIP_REG AS TEXT) LIKE param;
>
>
>
>
> El 21 de junio de 2016, 16:36, Herman Estaban<hermanestaban(at)gmail(dot)com>
> escribió:
>
>> Hellmuth gracias por la respuesta.
>>
>> Necesito el LIKE para devolver todo los codigos y tambien elegir un
>> codigo especifico.
>>
>> WHERE CAST(ID_TIP_REG AS CHAR) LIKE param;
>>
>> param : Que puede ser '%' todos o cualquiera de estos codigos 1, 2, 3, 4,
>> 5, 6, 7, 8, 9, 10, 11, 12, 13, 99.
>>
>> Como ya habia mencionado los campos primary key y foreign key son de tipo
>> de datos INTEGER o BIGINT, tengo tambien campos indicadores que son de
>> tipo CHAR(1) 'A' = ANULADO, 'V' = VIGENTE, '0'= INACTIVO, '1' = INACTIVO
>> por dar unos ejemplos, deberia trabajar estos con tipo de dato INTEGER,
>> seria mas eficiente, ya que trabajo los campos primary key y foreign key
>> porque INTEGER es mas rapido en las busquedas que usando CHAR.
>>
>> Saludos.
>>
>> El mar., 21 jun. 2016 a las 16:16, Hellmuth Vargas (<hivs77(at)gmail(dot)com>)
>> escribió:
>>
>>> Hola Herman
>>>
>>>
>>> Pensaría que tiene algo como:
>>>
>>> dominio de ID_TIP_REG:
>>> de 100 a 199 -> categoria1
>>> de 200 a 299 -> categoria2
>>> de 300 a 399 -> categoria3
>>> ....
>>>
>>>
>>> Si es así no debería utilizar LIKE sin mas bien un BETWEEN
>>>
>>>
>>> WHERE ID_TIP_REG BETWEEN <rango inferior categoria> AND <rango superior
>>> categoria>
>>>
>>>
>>>
>>>
>>> El 21 de junio de 2016, 16:01, Herman Estaban<hermanestaban(at)gmail(dot)com>
>>> escribió:
>>>
>>>> Buenas tardes, todos los campos primary key y foreign key de mis tablas
>>>> son de tipo de datos INTEGER y BIGINT.
>>>>
>>>> Y tengo la necesidad de hacer un LIKE a un campo de tipo INTEGER en un
>>>> SELECT.
>>>>
>>>> Que tan eficiente es hacer esto:
>>>>
>>>> WHERE CAST(ID_TIP_REG AS CHAR) LIKE '1%'
>>>>
>>>> LIKE es mas rapido con CHAR, VARCHAR que con INTEGER?
>>>>
>>>> Espero sus comentarios.
>>>>
>>>> Saludos.
>>>>
>>>
>>>
>>>
>>> --
>>> Cordialmente,
>>>
>>> Ing. Hellmuth I. Vargas S.
>>> Esp. Telemática y Negocios por Internet
>>> Oracle Database 10g Administrator Certified Associate
>>> EnterpriseDB Certified PostgreSQL 9.3 Associate
>>>
>>>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
> Esp. Telemática y Negocios por Internet
> Oracle Database 10g Administrator Certified Associate
> EnterpriseDB Certified PostgreSQL 9.3 Associate
>
>

--
Solo alcanzaras el conocimiento conociendo la ignorancia.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Herman Estaban 2016-06-22 00:47:57 Re: LIKE a campo integer
Previous Message Hellmuth Vargas 2016-06-21 21:57:01 Re: LIKE a campo integer