2017-09-19 1 views
1

ma table ressemble à ceci (toutes les colonnes sont nvarchar):Convertir nvarchar avec chaîne hexadécimale en binaire

| col1 | col2 | col3 | 
---------------------- 
| ... | FFF8 | ... | 
| ... | -1 | ... | 
| ... | FFF6 | ... | 
| ... | -9 | ... | 

Si la valeur dans la deuxième colonne n'est pas « -1 » ou « -9 » je veux convertir d'hex en binaire i. Aucune suggestion?

+0

quel est le type de données? –

+0

le type de données est nvarchar –

+0

et que voulez-vous faire si la valeur est -1 ou -9? –

Répondre

1

Merci à cette link

Il utilise encore remplace, mais il semble un peu mieux que la réponse précédente:

CREATE FUNCTION [dbo].[HexToBinary] 
(
@hex varchar(200) 
) 

RETURNS varchar(1000) 

AS 

BEGIN 

SET @HEX=REPLACE (@HEX,'0','0000') 
set @hex=replace (@hex,'1','0001') 
set @hex=replace (@hex,'2','0010') 
set @hex=replace (@hex,'3','0011') 
set @hex=replace (@hex,'4','0100') 
set @hex=replace (@hex,'5','0101') 
set @hex=replace (@hex,'6','0110') 
set @hex=replace (@hex,'7','0111') 
set @hex=replace (@hex,'8','1000') 
set @hex=replace (@hex,'9','1001') 
set @hex=replace (@hex,'A','1010') 
set @hex=replace (@hex,'B','1011') 
set @hex=replace (@hex,'C','1100') 
set @hex=replace (@hex,'D','1101') 
set @hex=replace (@hex,'E','1110') 
set @hex=replace (@hex,'F','1111') 

RETURN @hex 
END 

GO 
select 
CASE when col2 IN ('-1', '-9') THEN col2 
    ELSE [dbo].[HexToBinary] (col2) 
END as val 
from 
(
    SELECT 'FFF8' as col2 
    UNION ALL 
    SELECT '-1' as col2 
    UNION ALL 
    SELECT 'FFF6' as col2 
    UNION ALL 
    SELECT '-9' as col2 
) a 
1

Il peut y avoir un moyen plus simple, mais vous pouvez utiliser 18 remplacements. . .

select (case when col2 <> ('-1', '-9') 
      then replace(replace(. . . (replace(col2, '0', 'oooo'), '1', 'oool'), . . . , 
            'o', '0'), 'l', '1') 
      else col2 
     end) 

En d'autres termes, remplacez chaque chiffre hexadécimal par son équivalent en binaire. Cela utilise o pour 0 et 1 pour l. Cela empêche un remplacement d'affecter un autre.

+0

pourquoi pas 16 remplace? –

+1

@DmitrijKultasev Pour convertir les occurrences de "o" en "0" et "l" en "1". –

+0

ohh, ouais. N'a pas rien à ce sujet. –