Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Encodage Base64 dans SQL Server 2005 T-SQL

Je sais que cela a déjà été répondu, mais j'ai juste passé plus de temps que je ne veux l'admettre à créer des instructions SQL sur une seule ligne pour accomplir cela, donc je les partagerai ici au cas où quelqu'un d'autre aurait besoin de faire la même chose :

-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT CAST('TestData' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;

-- Decode the Base64-encoded string "VGVzdERhdGE=" to get back "TestData"
SELECT 
    CAST(
        CAST(N'' AS XML).value(
            'xs:base64Binary("VGVzdERhdGE=")'
          , 'VARBINARY(MAX)'
        ) 
        AS VARCHAR(MAX)
    )   ASCIIEncoding
;

J'ai dû utiliser une table générée par une sous-requête dans la première requête (encodage) car je n'ai trouvé aucun moyen de convertir la valeur d'origine ("TestData") en sa représentation de chaîne hexadécimale ("5465737444617461") à inclure comme argument à xs:hexBinary() dans l'instruction XQuery.

J'espère que cela aidera quelqu'un !