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, VA
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 AND
El 21 de junio de 2016, 16:01, Herman Estaban
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 mencion
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)
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
Gracias por las respuestas.
Voy a explicar mejor lo que requiero.
Tengo una tabla PRD_REG con 02 campos:
ID_TIP_REG INTEGER
NOM_TIP_REG VARCHAR(25)
Esta tabla tiene 14 registros y esta registrado asi:
ID_TIP_REG | NOM_TIP_REG
1 | DETALLADO
2 | MARCADO
3
Hola Herman
El filtro no debería aplicarse sobre la llave foranea ID_TIP_REG, la
consulta hipotética seria algo así:
SELECT campos
FROM tabla1 AS a
JOIN PRD_REG AS b ON a.ID_TIP_REG=b.ID_TIP_REG
WHERE b.*NOM_TIP_REG like param*:
donde *param* puede ser cualquier de los valores del dominio
(DET
Herman Estaban escribió:
> Tengo una tabla PRD_REG con 02 campos:
>
> ID_TIP_REG INTEGER
> NOM_TIP_REG VARCHAR(25)
>
> Esta tabla tiene 14 registros y esta registrado asi:
>
> ID_TIP_REG | NOM_TIP_REG
> 1 | DETALLADO
> 2 | MARCADO
> 3 | PR
Buenas.
Lo mas simple para esto es usar un OR
--
SELECT *
FROM PRD_REG
WJERE (ID_TIP_REG = param OR param = 0)
Saludos.
El 22 de junio de 2016, 9:31, Alvaro Herrera
escribió:
> Herman Estaban escribió:
>
> > Tengo una tabla PRD_REG con 02 campos:
> >
> > ID_TIP_REG INTEGER
> > NOM_TIP_REG
eduardo reyes escribió:
> Buenas.
> Lo mas simple para esto es usar un OR
> --
> SELECT *
>FROM PRD_REG
> WJERE (ID_TIP_REG = param OR param = 0)
Ya ven lo que pasa cuando uno responde antes de desayunar -- tu
solución es mucho más simple. Pero yo usaría NULL en vez de 0:
SELECT *
FR
Gracias por sus aportes.
Saludos.
El mié., 22 jun. 2016 a las 9:48, Alvaro Herrera ()
escribió:
> eduardo reyes escribió:
> > Buenas.
> > Lo mas simple para esto es usar un OR
> > --
> > SELECT *
> >FROM PRD_REG
> > WJERE (ID_TIP_REG = param OR param = 0)
>
> Ya ven lo que pasa cuando uno
11 matches
Mail list logo