Accueil > > > SQL SERVER : CONVERSION IP EN CHAÎNE DE TEXTE VERS INTEGER ET INVERSE
SQL SERVER : CONVERSION IP EN CHAÎNE DE TEXTE VERS INTEGER ET INVERSE
Information sur la source
Description
Voici 2 fonctions permettant la conversion d'une chaîne de caractère contenant une adresse IP vers un int (Entier signé 32bits) en Transact-SQL. Et une autre fonction réalisant l'opération inverse.
Source
- CREATE FUNCTION dbo.ConvertIntToIp ( @AddrInt int )
- RETURNS varchar(15)
- BEGIN
-
- RETURN CAST(CAST(CAST(( @AddrInt & 0xFF000000 ) / 0x01000000 AS binary(1)) as tinyint) as varchar(3))
- + '.'
- + CAST(CAST(CAST(( @AddrInt & 0xFF0000 ) / 0x010000 AS binary(1)) as tinyint) as varchar(3))
- + '.'
- + CAST(CAST(CAST(( @AddrInt & 0xFF00 ) / 0x0100 AS binary(1)) as tinyint) as varchar(3))
- + '.'
- + CAST(CAST(CAST(( @AddrInt & 0xFF ) AS binary(1)) as tinyint) as varchar(3))
-
- END
- GO
-
-
-
- CREATE FUNCTION dbo.ConvertIpToInt ( @AddrIp varchar(15) )
- RETURNS int
- BEGIN
-
- DECLARE @first smallint
- DECLARE @second smallint
- DECLARE @third smallint
- DECLARE @fourth smallint
-
- DECLARE @result int
-
- DECLARE @test varchar(4)
-
- DECLARE @cur_loc tinyint
- DECLARE @last_loc tinyint
-
-
- -- Premier Bloc
- SET @cur_loc = CHARINDEX('.', @AddrIp)
- SET @test = LEFT(LEFT(@AddrIp, @cur_loc - 1), 3)
-
- IF PATINDEX('%[^0-9]%', @test) = 0
- BEGIN
- SET @first = CAST(@test AS smallint)
-
- -- Second Bloc
- SET @last_loc = @cur_loc + 1
- SET @cur_loc = CHARINDEX('.', @AddrIp, @last_loc)
- SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
- @cur_loc - @last_loc), 3)
-
- IF PATINDEX('%[^0-9]%', @test) = 0
- BEGIN
- SET @second = CAST(@test AS smallint)
-
-
- -- Troisième Bloc
- SET @last_loc = @cur_loc + 1
- SET @cur_loc = CHARINDEX('.', @AddrIp, @last_loc)
- SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
- @cur_loc - @last_loc), 3)
-
- IF PATINDEX('%[^0-9]%', @test) = 0
- BEGIN
- SET @third = CAST(@test AS smallint)
-
- -- Quatrième Bloc
- SET @last_loc = @cur_loc + 1
- SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
- LEN(@AddrIp)
- - @last_loc + 1), 3)
-
- IF PATINDEX('%[^0-9]%', @test) = 0
- BEGIN
- SET @fourth = CAST(@test AS smallint)
- END
-
- END
-
- END
-
- END
-
- -- Résultat
- IF @first <= 255
- AND @second <= 255
- AND @third <= 255
- AND @fourth <= 255
- BEGIN
- IF @first <= 127
- SET @result = CAST(@first as int) * 0x1000000
- + CAST(@second as int) * 0x10000 + CAST(@third as int)
- * 0x100 + CAST(@fourth as int)
- ELSE
- SET @result = ( CAST(( @first & 0x7F ) as int) * 0x1000000
- + CAST(@second as int) * 0x10000
- + CAST(@third as int) * 0x100
- + CAST(@fourth as int) ) | 0x80000000
- END
-
- RETURN @result
-
- END
- GO
CREATE FUNCTION dbo.ConvertIntToIp ( @AddrInt int )
RETURNS varchar(15)
BEGIN
RETURN CAST(CAST(CAST(( @AddrInt & 0xFF000000 ) / 0x01000000 AS binary(1)) as tinyint) as varchar(3))
+ '.'
+ CAST(CAST(CAST(( @AddrInt & 0xFF0000 ) / 0x010000 AS binary(1)) as tinyint) as varchar(3))
+ '.'
+ CAST(CAST(CAST(( @AddrInt & 0xFF00 ) / 0x0100 AS binary(1)) as tinyint) as varchar(3))
+ '.'
+ CAST(CAST(CAST(( @AddrInt & 0xFF ) AS binary(1)) as tinyint) as varchar(3))
END
GO
CREATE FUNCTION dbo.ConvertIpToInt ( @AddrIp varchar(15) )
RETURNS int
BEGIN
DECLARE @first smallint
DECLARE @second smallint
DECLARE @third smallint
DECLARE @fourth smallint
DECLARE @result int
DECLARE @test varchar(4)
DECLARE @cur_loc tinyint
DECLARE @last_loc tinyint
-- Premier Bloc
SET @cur_loc = CHARINDEX('.', @AddrIp)
SET @test = LEFT(LEFT(@AddrIp, @cur_loc - 1), 3)
IF PATINDEX('%[^0-9]%', @test) = 0
BEGIN
SET @first = CAST(@test AS smallint)
-- Second Bloc
SET @last_loc = @cur_loc + 1
SET @cur_loc = CHARINDEX('.', @AddrIp, @last_loc)
SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
@cur_loc - @last_loc), 3)
IF PATINDEX('%[^0-9]%', @test) = 0
BEGIN
SET @second = CAST(@test AS smallint)
-- Troisième Bloc
SET @last_loc = @cur_loc + 1
SET @cur_loc = CHARINDEX('.', @AddrIp, @last_loc)
SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
@cur_loc - @last_loc), 3)
IF PATINDEX('%[^0-9]%', @test) = 0
BEGIN
SET @third = CAST(@test AS smallint)
-- Quatrième Bloc
SET @last_loc = @cur_loc + 1
SET @test = LEFT(SUBSTRING(@AddrIp, @last_loc,
LEN(@AddrIp)
- @last_loc + 1), 3)
IF PATINDEX('%[^0-9]%', @test) = 0
BEGIN
SET @fourth = CAST(@test AS smallint)
END
END
END
END
-- Résultat
IF @first <= 255
AND @second <= 255
AND @third <= 255
AND @fourth <= 255
BEGIN
IF @first <= 127
SET @result = CAST(@first as int) * 0x1000000
+ CAST(@second as int) * 0x10000 + CAST(@third as int)
* 0x100 + CAST(@fourth as int)
ELSE
SET @result = ( CAST(( @first & 0x7F ) as int) * 0x1000000
+ CAST(@second as int) * 0x10000
+ CAST(@third as int) * 0x100
+ CAST(@fourth as int) ) | 0x80000000
END
RETURN @result
END
GO
Conclusion
Ce sont des UDF (User Defined Function), donc au niveau de l'appel ne pas oublier le nom du schéma (ici dbo). Le code est de fait manière qu'en cas d'erreur la fonction renvoie NULL et ne génère pas d'arreur.
Historique
- 06 juin 2007 10:21:52 :
- Ajout de SQL Server dans le titre
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Problème de conversion Access -> SQL Server 2000 [ par NHenry ]
BonjourJ'ai un petit problème, lorsque je tente de convertir (avec l'outils fournis avec SQL Server 2000 Developper edition) une base de données (Acce
adresse sql pour wanadoo [ par CCJ ]
Slt tt le monde bon voila je me suis mis au php et donc au MySQL mais le bleme c'est que je sais pas comment exporter ma base et pour ca il parait qu'
SQL comment écrire cette requête [ par jmey ]
Je cherche une fonction SQL. Voici le problème : J’ai un fichier CLIENT e
Qt et SQL Server [ par spider727 ]
Bonjour,je suis un etudiant et je prepare un projet qui aura un interface avec Qt et une sgbd avec sql management studio 2008 et un serveur sur SQL Se
SQL server 2005 et le réseau [ par crn_c21 ]
Bonjour,Je travaille avec 2 serveurs en réplication de l'un vers l'autre sur un grand réseau.Chaque serveur possède 2 cartes réseau. Pour des raisons
réplication [ par adrahammoud ]
Bonjour, je veux transferer des données d'une base de données vers une autre à l'aide de la réplication en SQL Server 2000. au début je dois disposer
erreur ssis [ par gperuch ]
Bonjour,Je vais faire un petit post avec une auto réponse car j'ai ramé pour trouver la cause de mon pb et que je ne le souhaite à personneLe Problème
limites dans sql server 2005 [ par IhabYktn ]
il n'y a pas de themes convenient.on sait que le nombre de rows dans une table dans sql server 2005 est illimite... j'ai une table qui contiendrait 50
comment exécuter un script sql à partir de la ligne de commande ? [ par feros2184 ]
salut Je suis sur le point d'utiliser l'utilitaire tablediff.exe de SQL Server
[SQL Express] Crypter les données d'une BD ou la BD entière [ par vbman31 ]
Bonjour,Je développe une application qui utilise une BD SQL Express.Est-il possible de crypter entièrement la BD pour ne pas que le client puisse lire
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
PROCEDURE MYSQLPROCEDURE MYSQL par gearmat
Cliquez pour lire la suite par gearmat
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|