Query

10/04/2006 - 21:35 por Kevo | Informe spam
He levantado una tabla con rangos de IP pertenecientes a varias empresas
clientes
Por ejemplo, empresa "X" tiene IP's de 192.168.0.13 hasta 192.168.0.27
Entonces tabla se constituye com los campos: IP1,IP2,EMPRESA,id

Necesito crear una busqueda que me devuelva el nombre de la empresa a la que
pertenece una dirección IP en específico.

De antemano, Gracias!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
10/04/2006 - 21:57 | Informe spam
Kevo,

Quizas puedas convertir el valor del IP a un bigint y usar el operador
"between".

select *
from t1
where @ip between cast(replace(ip1, '.', '') as bigint) and
cast(replace(ip2, '.', '') as bigint)
go

Si esta tabla contiene muchas filas, entonces no esperes buen tiempo de
respuesta por parte de sql server en esta sentencia porque no hara un uso
apropiado de indices en caso de que estos existan por las columnas ip1 y ip2.
No es buena practica manipular las columnas que toman parte en el filtro.


AMB

"Kevo" wrote:

He levantado una tabla con rangos de IP pertenecientes a varias empresas
clientes
Por ejemplo, empresa "X" tiene IP's de 192.168.0.13 hasta 192.168.0.27
Entonces tabla se constituye com los campos: IP1,IP2,EMPRESA,id

Necesito crear una busqueda que me devuelva el nombre de la empresa a la que
pertenece una dirección IP en específico.

De antemano, Gracias!
Respuesta Responder a este mensaje
#2 Kevo
10/04/2006 - 22:46 | Informe spam
Vieras que ésta opción no me devuelve los resultados esperados, las filas que
me devuelve en realidad no considen con la IP que busco.

Sin embargo, Muchas Gracias! Alejandro.

Si tienes alguna otra idea, bienvenida sea.
____________________________________________

"Alejandro Mesa" wrote:

Kevo,

Quizas puedas convertir el valor del IP a un bigint y usar el operador
"between".

select *
from t1
where @ip between cast(replace(ip1, '.', '') as bigint) and
cast(replace(ip2, '.', '') as bigint)
go

Si esta tabla contiene muchas filas, entonces no esperes buen tiempo de
respuesta por parte de sql server en esta sentencia porque no hara un uso
apropiado de indices en caso de que estos existan por las columnas ip1 y ip2.
No es buena practica manipular las columnas que toman parte en el filtro.


AMB

"Kevo" wrote:

> He levantado una tabla con rangos de IP pertenecientes a varias empresas
> clientes
> Por ejemplo, empresa "X" tiene IP's de 192.168.0.13 hasta 192.168.0.27
> Entonces tabla se constituye com los campos: IP1,IP2,EMPRESA,id
>
> Necesito crear una busqueda que me devuelva el nombre de la empresa a la que
> pertenece una dirección IP en específico.
>
> De antemano, Gracias!
Respuesta Responder a este mensaje
#3 Kevo
10/04/2006 - 22:57 | Informe spam
Otra pregunta con respecto a éste tema:

Alguna idea de cómo partir la IP en varias partes?
Eje. 192.168.0.1 dividirla en a2, b8, c=0, d=1
O algo similar.
Entonces pordría quizá comparar cada integer independientemente, habiendo
filtrado primeramente, los campos similares para reducir el tiempo de
busqueda.


"Kevo" wrote:

He levantado una tabla con rangos de IP pertenecientes a varias empresas
clientes
Por ejemplo, empresa "X" tiene IP's de 192.168.0.13 hasta 192.168.0.27
Entonces tabla se constituye com los campos: IP1,IP2,EMPRESA,id

Necesito crear una busqueda que me devuelva el nombre de la empresa a la que
pertenece una dirección IP en específico.

De antemano, Gracias!
Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/04/2006 - 13:58 | Informe spam
Kevo,

Creo que se nos olvido hacer la misma operacion sobre la ip que buscas.

declare @ip varchar(15)
declare @ip1 varchar(15)
declare @ip2 varchar(15)

set @ip1 = '192.168.0.13'
set @ip2 = '192.168.0.27'
set @ip = '192.168.0.15'

select
@ip1, @ip, @ip2
where
cast(replace(@ip, '.', '') as bigint) between cast(replace(@ip1, '.', '')
as bigint) and
cast(replace(@ip2, '.', '') as bigint)
go

En cuanto a tu pregunta de como particionar un ip, puedes usar la funcion
substring, stuff, right, left, etc. Tambien puedes usar una tabla auxiliar de
numeros, la cual puede ser muy util para una serie de calculos en t-sql.

select identity(int, 1, 1) as numero
into dbo.numero
from sysobjects as a cross join sysobjects as b
go

create unique clustered index numero_numero_u_c_idx
on numero(numero asc)
go

declare @ip varchar(15)

set @ip = '192.168.0.13'

select
substring('.' + @ip + '.', n.numero + 1, charindex('.', '.' + @ip + '.',
n.numero + 1) - n.numero - 1)
from
dbo.numero as n
where
substring('.' + @ip + '.', n.numero, 1) = '.' and n.numero < len('.' + @ip
+ '.')
go

drop table dbo.numero
go


AMB



"Kevo" wrote:

Vieras que ésta opción no me devuelve los resultados esperados, las filas que
me devuelve en realidad no considen con la IP que busco.

Sin embargo, Muchas Gracias! Alejandro.

Si tienes alguna otra idea, bienvenida sea.
____________________________________________

"Alejandro Mesa" wrote:

> Kevo,
>
> Quizas puedas convertir el valor del IP a un bigint y usar el operador
> "between".
>
> select *
> from t1
> where @ip between cast(replace(ip1, '.', '') as bigint) and
> cast(replace(ip2, '.', '') as bigint)
> go
>
> Si esta tabla contiene muchas filas, entonces no esperes buen tiempo de
> respuesta por parte de sql server en esta sentencia porque no hara un uso
> apropiado de indices en caso de que estos existan por las columnas ip1 y ip2.
> No es buena practica manipular las columnas que toman parte en el filtro.
>
>
> AMB
>
> "Kevo" wrote:
>
> > He levantado una tabla con rangos de IP pertenecientes a varias empresas
> > clientes
> > Por ejemplo, empresa "X" tiene IP's de 192.168.0.13 hasta 192.168.0.27
> > Entonces tabla se constituye com los campos: IP1,IP2,EMPRESA,id
> >
> > Necesito crear una busqueda que me devuelva el nombre de la empresa a la que
> > pertenece una dirección IP en específico.
> >
> > De antemano, Gracias!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida