sql >> Databáze >  >> RDS >> Sqlserver

Kódování Base64 v SQL Server 2005 T-SQL

Vím, že na to již bylo zodpovězeno, ale strávil jsem více času, než jsem chtěl přiznat, vymýšlením jednořádkových příkazů SQL, abych toho dosáhl, takže je zde pro případ, že by někdo potřeboval udělat totéž, sdílím:

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

V prvním (kódovacím) dotazu jsem musel použít tabulku vygenerovanou poddotazem, protože jsem nemohl najít žádný způsob, jak převést původní hodnotu ("TestData") na její hexadecimální reprezentaci řetězce ("5465737444617461"), kterou bych zahrnul jako argument do xs:hexBinary() v příkazu XQuery.

Doufám, že to někomu pomůže!



  1. Podivné změny rychlosti s dotazem SQL

  2. MySQL GROUP BY věkové rozmezí včetně nulových rozsahů

  3. Jak vypsat všechny pohledy v databázi Oracle

  4. Úrovně izolace SQL serveru:Řada A