Tratamiento de IPs con SQL Server

29/10/2004 - 13:53 por Jorge Serrano [MVP VB] | Informe spam
Hola a to2,

aquí planteo mi duda para ver si alguien me puede echar un poco de luz al
tema.

Tengo una IP Origen del tipo 192.168.2.32 por ejemplo y un rango de IPs
inicial y final del tipo 192.168.002.001 y 192.168.002.041.

Lo que quiero es saber si la IP Origen está dentro o no del rango de IPs,
para lo cuál se me ocurren dos alternativas (estos datos debo cruzarlos entre
dos tablas dónde otro campo Fecha también tiene su importancia, pero que
ahora no voy a sacarlo a relucir).

Estas alternativas serían;

1) La IP Origen formatearla para dejarla como 192.168.002.032 y compararla,
pero ¿esto funcionaría correctamente?.
Por eso y para posiblemente solucionar esto, se me ocurre esto otro.

Ejecutando esta instrucción:
SELECT PARSENAME(IP, 4) +
PARSENAME(IP, 3) +
PARSENAME(IP, 2) +
PARSENAME(IP, 1) as IP
FROM TABLA
Obtendría una IP del tipo: 192168232, pero me gustaría obtenerla como
192168002032 para poder compararla posteriormente con las IPs 192168002001 y
192168002041. Así podría ver si se encuentra dentro del rango >= y <=.


2) Obtener el rango de inicio y fin; 192.168.002.001 y 192.168.002.041 y
crear las IPs intermedias (lista de IPs para hacer el IN en la tabla, lista
del tipo 192.168.002.001, 192.168.002.002, ..., 192.168.002.040 y
192.168.002.041


Bueno, como véis tengo estas alternativas, por lo que si alguien pudiera
darme luz al respecto y decirme qué o cómo podría hacerlo de una forma
adecuada, mucho mejor.


Muchas gracias.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/

Preguntas similare

Leer las respuestas

#11 Miguel Egea
30/10/2004 - 18:30 | Informe spam
No creo que sea posible, tengo una punta de trabajo importante y ya sabes...
lo primero es antes.. :-)

En cualquier caso dame un toque por que me han invitado (como a tí) a estar
en el stand de Microsoft y eso me apetece mucho :-).

Saludos

-
Miguel Egea Gómez
Microsoft SQL-Server MVP
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?



"Jorge Serrano [MVP VB]"
escribió
en el mensaje news:
1000 gracias Miguel.
Tendré en cuenta lo que me dices para el futuro... en este caso... la cosa
es más que complicada y lo que comentas no es factible, pero me lo apunto
por
si se aplicara en el futuro a otras "berenjenas" varias que surjieran. :-)

Un abrazote... espero verte a tí tb por Madrid!

Jorge


"Miguel Egea" wrote:

Como añadido a lo que dice Gustavo y para lo que necesitas jorge, yo
crearía
un campo calculado en esa tabla que fuese precisamente la llamada a esta
función y después crearía un índice por ese nuevo campo. Así conseguirás
un
buen rendimiento.


-
Miguel Egea Gómez
Microsoft SQL-Server MVP
Webmaster de PortalSql.Com
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Jorge Serrano [MVP VB]"

escribió
en el mensaje news:
> Muy útil Gustavo. :-)
>
> Muchas gracias!!!
>
> Jorge
>
>
> "Gustavo Larriera [MVP]" wrote:
>
>> Esta función puede serte de utilidad. Lo que hago allí es convertir
>> una
>> IP a
>> formato BIGINT nnnnnnnnnnnn
>>
>> create function ip2int (@ip sysname) returns bigint
>> as
>> begin
>> return 1000000000*convert(bigint, parsename(@ip,4)) +
>> 1000000*convert(bigint, parsename(@ip,3)) + 1000*convert(bigint,
>> parsename(@ip,2)) + convert(bigint, parsename(@ip,1))
>> end
>>
>> select dbo.ip2int('192.168.24.1') -- retorna 192168024001
>>
>>
>>
>> Gustavo Larriera, MVP
>> Uruguay LatAm
>> http://sqljunkies.com/weblog/gux/
>> Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga
>> ningun
>> derecho / This posting is provided "AS IS" with no warranties, and
>> confers
>> no rights.
>> "Jorge Serrano [MVP VB]"
>>
>> wrote
>> in
>> message news:
>> > Hola a to2,
>> >
>> > aquí planteo mi duda para ver si alguien me puede echar un poco de
>> > luz
>> > al
>> > tema.
>> >
>> > Tengo una IP Origen del tipo 192.168.2.32 por ejemplo y un rango de
>> > IPs
>> > inicial y final del tipo 192.168.002.001 y 192.168.002.041.
>> >
>> > Lo que quiero es saber si la IP Origen está dentro o no del rango de
>> > IPs,
>> > para lo cuál se me ocurren dos alternativas (estos datos debo
>> > cruzarlos
>> > entre
>> > dos tablas dónde otro campo Fecha también tiene su importancia, pero
>> > que
>> > ahora no voy a sacarlo a relucir).
>> >
>> > Estas alternativas serían;
>> >
>> > 1) La IP Origen formatearla para dejarla como 192.168.002.032 y
>> > compararla,
>> > pero ¿esto funcionaría correctamente?.
>> > Por eso y para posiblemente solucionar esto, se me ocurre esto otro.
>> >
>> > Ejecutando esta instrucción:
>> > SELECT PARSENAME(IP, 4) +
>> > PARSENAME(IP, 3) +
>> > PARSENAME(IP, 2) +
>> > PARSENAME(IP, 1) as IP
>> > FROM TABLA
>> > Obtendría una IP del tipo: 192168232, pero me gustaría obtenerla
>> > como
>> > 192168002032 para poder compararla posteriormente con las IPs
>> > 192168002001
>> > y
>> > 192168002041. Así podría ver si se encuentra dentro del rango >= y
>> > <=.
>> >
>> >
>> > 2) Obtener el rango de inicio y fin; 192.168.002.001 y
>> > 192.168.002.041
>> > y
>> > crear las IPs intermedias (lista de IPs para hacer el IN en la
>> > tabla,
>> > lista
>> > del tipo 192.168.002.001, 192.168.002.002, ..., 192.168.002.040 y
>> > 192.168.002.041
>> >
>> >
>> > Bueno, como véis tengo estas alternativas, por lo que si alguien
>> > pudiera
>> > darme luz al respecto y decirme qué o cómo podría hacerlo de una
>> > forma
>> > adecuada, mucho mejor.
>> >
>> >
>> > Muchas gracias.
>> >
>> > Jorge Serrano Pérez
>> > Microsoft MVP VB.NET
>> > PortalVB.com
>> > http://www.portalvb.com/
>> > Weblog de Jorge Serrano
>> > http://weblogs.golemproject.com/jorge/
>>
>>
>>



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