Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Fonction de conversion de Hexadécimal vers Décimal en Decimal(38,0)

Petit code qui m'a été utile dernièrement, le problème étant que SQL Server en cas de conversion cité plus haut vers un bigint par exemple utilise un entier signé, la conversion peut se relever fausse. De plus au-delà du Bigint ce n'est plus possible d'où l'idée d'écrire une fonction qui cible le plus grand type existant dans SQL Server decimal(38,0), soit 38 décimales, il faudra changer en fonction la taille de la chaine hexa entrante.

Ce n'est pas la plus efficace du monde étant donné que j'itère que calculer la puissance de 2, mais il se trouve que la fonction POWER de SQL perd en précision sur les grandes puissant, car il se base sur le type float.

ALTER FUNCTION fn_hex2dec(@hexstr varchar(16))
RETURNS decimal(38,0)
AS
BEGIN

    DECLARE @i int =
0 ;
    DECLARE
@j int =
0 ;

    DECLARE
@hexval varchar(16) = REVERSE(RTRIM(LTRIM(UPPER(@hexstr)))) ;
    DECLARE @decval decimal(38,0) = 0;
    DECLARE
@power decimal(38,0) = 0;
    

    IF @hexval LIKE
'%^[0123456789ABCDEF]%'
        RETURN NULL ;
    

    

    DECLARE @hexstring char(16) = '0123456789ABCDEF';
    

    WHILE @i < LEN(@hexval)
    BEGIN
    

        IF @i = 0
            SET @power = 1;
        ELSE
        BEGIN
            
            SET @j = 1 ;
            SET @power = 16;
        
            WHILE @j <= @i - 1
            BEGIN
            
                SET @power *= 16 ;
                SET @j += 1 ;
            
            END
            
        END

        SET @decval += CAST(CHARINDEX(SUBSTRING(@hexval, @i + 1, 1), @hexstring) - 1 AS decimal(38,0)) * @power ;
        SET
@i += 1 ;
    

    END
    

    RETURN @decval

    
END



Si vous trouvez mieux (En TSQL, EF refuse et .Net aussi) je suis preneur, en attendant si cette fonction peut être utile à quelqu'un.

Bonne fonction…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié vendredi 12 novembre 2010 20:36 par christian

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Simuler facilement l’envoi de mail par Blog de Jérémy Jeanson le il y a 11 heures et 28 minutes

- ProcDump 6.0 : support du filtrage sur messages d'exceptions .NET, des filtres multiples et du ciblage par nom de service par CoqBlog le 05-20-2013, 14:50

- Votez pour le TOP 10 des influenceurs SharePoint francophones ! par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 12:59

- [Conf’SharePoint] Dernier rappel ! :-) par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:09

- [ #SharePoint 2013 ] les modèles de sites standards… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 09:03

- 10 erreurs de compréhension concernant SharePoint… par Le blog de Patrick [MVP SharePoint] le 05-20-2013, 08:27

- Conf’SharePoint : 10 bonnes raisons pour ne pas la rater par Le petit blog de Pierre / Pierre's little blog le 05-14-2013, 02:24

- [Event] Soirée de lancement Agile .NET France à Lyon par Blog Agile/ALM de Vincent THAVONEKHAM le 05-13-2013, 01:29

- .NET / Debug : inspection de la mémoire d'applications .NET (dump ou processus live) : première livraison d'une librairie .NET par Microsoft par CoqBlog le 05-11-2013, 22:21

- SharePoint : Incompatibilité avec Internet Explorer 10 (IE10) par Blog Technique de Romelard Fabrice le 05-08-2013, 16:29