Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Codifica Base64 in SQL Server 2005 T-SQL

So che è già stata data una risposta, ma ho appena trascorso più tempo di quanto mi interessa ammettere di trovare istruzioni SQL a riga singola per ottenere ciò, quindi le condividerò qui nel caso in cui qualcun altro debba fare lo stesso:

-- 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
;

Ho dovuto utilizzare una tabella generata da sottoquery nella prima query (di codifica) perché non riuscivo a trovare alcun modo per convertire il valore originale ("TestData") nella sua rappresentazione di stringa esadecimale ("54657374444617461") da includere come argomento per xs:hexBinary() nell'istruzione XQuery.

Spero che questo aiuti qualcuno!