Filtrar consulta

30/01/2004 - 16:47 por Antonio J. | Informe spam
Saludos,

tengo una tabla en la que uno de los campos (CODIGO) sigue una codificación,
más o menos parecida a una estructura de árbol:
A
BB
-CCC
Esto me dice que el campo CODIGO vale ABBCCC, por ejemplo.
Otros valores podrían ser ABBABC, ABBCEE, ABBHIJ..., BAACEE, BAARRR,
BAAEEE...

Como veis, los tres primeros caracteres nos indican grupos.
La sentencia SQL que necesito hacer es que me seleccione el campo CODIGO
filtrando por un dato que yo haya escrito sin tener en cuenta los 3 primeros
caracteres.

Es decir, que si tengo en la tabla los siguientes valores:
ABBCCC
ABBCCA
BAACCC
BAACCO
CEECOO
CEEKLL
CEEHJK
...
y quiero que me filtre por "CC", la consulta me tendría que devolver lo
siguiente:
ABBCCC
ABBCCA
BAACCC
BAACCO

Así que necesito saber si hay algún comodín para suplantar a los 3 primeros
caracteres.´
Con lo que me quedaría una sentencia así:
select * from TABLA where CODIGO like '???CC%'

Y las interrogaciones serían el comodín.
¿Es posible hacer eso? ¿cómo? ¿hay algún otro método?

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Antonio J.
30/01/2004 - 16:52 | Informe spam
Vale, un rato buscando, y justo después de poner el mensaje, lo encuentro,
jeje.

Por si a alguien le interesa, el comodín sería el subrayado: _

Saludos



"Antonio J." escribió en el mensaje
news:#
Saludos,

tengo una tabla en la que uno de los campos (CODIGO) sigue una


codificación,
más o menos parecida a una estructura de árbol:
A
BB
-CCC
Esto me dice que el campo CODIGO vale ABBCCC, por ejemplo.
Otros valores podrían ser ABBABC, ABBCEE, ABBHIJ..., BAACEE, BAARRR,
BAAEEE...

Como veis, los tres primeros caracteres nos indican grupos.
La sentencia SQL que necesito hacer es que me seleccione el campo CODIGO
filtrando por un dato que yo haya escrito sin tener en cuenta los 3


primeros
caracteres.

Es decir, que si tengo en la tabla los siguientes valores:
ABBCCC
ABBCCA
BAACCC
BAACCO
CEECOO
CEEKLL
CEEHJK
...
y quiero que me filtre por "CC", la consulta me tendría que devolver lo
siguiente:
ABBCCC
ABBCCA
BAACCC
BAACCO

Así que necesito saber si hay algún comodín para suplantar a los 3


primeros
caracteres.´
Con lo que me quedaría una sentencia así:
select * from TABLA where CODIGO like '???CC%'

Y las interrogaciones serían el comodín.
¿Es posible hacer eso? ¿cómo? ¿hay algún otro método?

Muchas gracias.


Respuesta Responder a este mensaje
#2 Edu
30/01/2004 - 16:57 | Informe spam
"Antonio J." wrote


Tambien lo podías haber hecho a base de restos y divisiones enteras
Respuesta Responder a este mensaje
#3 Miguel Egea
30/01/2004 - 17:36 | Informe spam
Sin embargo, yo no creo que sea una buena idea esa
estructura si vas a tener muchos datos, fijate en esto...
Select * from products where productid like '__A%'

(1 filas afectadas)

StmtText


-
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].
[Products].[PK_Products]), WHERE:(like(Convert([Products].
[ProductID]), '__A%', NULL)))


Es decir, cada vez que busques un código tendrás que
recorrer toda tu tabla!!!
Por otra parte, ¿como piensas implementar la integridad
referencial?, Creo que tu diseño, no está en 3FN y que
puede generar serios problemas de rendimiento.

Si quieres podemos (entre todos) buscar una alternativa
más eficiente.

Un saludo desde portalsql.

Miguel Egea

"Antonio J." wrote


Tambien lo podías haber hecho a base de restos y


divisiones enteras
.

Respuesta Responder a este mensaje
#4 Jose Mariano Alvarez \(MUG\)
30/01/2004 - 21:44 | Informe spam
Si de performance se trata en SQL 2K puedes crear columnas computadas y bajo
ciertas condiciones aplicarles indices
Pero coincido con miguel que quiza no sea la mejor alternativa esta
estructura

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"Adrian Garcia" wrote in message
news:
Coincido con Miguel, en caso de que tu tabla sea grande vas a notar como


el
rendimiento de esta consulta disminuye dia a dia.

Saludos

Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Miguel Egea" wrote in message
news:75a101c3e74f$3b333470$
Sin embargo, yo no creo que sea una buena idea esa
estructura si vas a tener muchos datos, fijate en esto...
Select * from products where productid like '__A%'

(1 filas afectadas)

StmtText


-
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].
[Products].[PK_Products]), WHERE:(like(Convert([Products].
[ProductID]), '__A%', NULL)))


Es decir, cada vez que busques un código tendrás que
recorrer toda tu tabla!!!
Por otra parte, ¿como piensas implementar la integridad
referencial?, Creo que tu diseño, no está en 3FN y que
puede generar serios problemas de rendimiento.

Si quieres podemos (entre todos) buscar una alternativa
más eficiente.

Un saludo desde portalsql.

Miguel Egea

>"Antonio J." wrote
>
>
>Tambien lo podías haber hecho a base de restos y
divisiones enteras
>.
>


Respuesta Responder a este mensaje
#5 Adrian Garcia
31/01/2004 - 01:49 | Informe spam
Coincido con Miguel, en caso de que tu tabla sea grande vas a notar como el
rendimiento de esta consulta disminuye dia a dia.

Saludos

Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Miguel Egea" wrote in message
news:75a101c3e74f$3b333470$
Sin embargo, yo no creo que sea una buena idea esa
estructura si vas a tener muchos datos, fijate en esto...
Select * from products where productid like '__A%'

(1 filas afectadas)

StmtText


-
|--Clustered Index Scan(OBJECT:([Northwind].[dbo].
[Products].[PK_Products]), WHERE:(like(Convert([Products].
[ProductID]), '__A%', NULL)))


Es decir, cada vez que busques un código tendrás que
recorrer toda tu tabla!!!
Por otra parte, ¿como piensas implementar la integridad
referencial?, Creo que tu diseño, no está en 3FN y que
puede generar serios problemas de rendimiento.

Si quieres podemos (entre todos) buscar una alternativa
más eficiente.

Un saludo desde portalsql.

Miguel Egea

"Antonio J." wrote


Tambien lo podías haber hecho a base de restos y


divisiones enteras
.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida