1. ホーム
  2. sql-server-2005

[解決済み] SQL Server 2005 T-SQL での Base64 エンコーディング

2022-06-12 02:18:58

質問

文字列を Base64 文字列としてエンコードする T-SQL クエリを書きたいと思っています。 驚いたことに、Base64 エンコードを行うためのネイティブ T-SQL 関数が見当たりません。 ネイティブ関数は存在するのでしょうか? そうでない場合、T-SQLでBase64エンコードを行う最良の方法は何でしょうか?

どのように解決するのですか?

これはすでに回答されていると思いますが、私はこれを達成するための単一行の SQL 文を考え出すのに、認めたくないほど多くの時間を費やしましたので、他の誰かが同じことをする必要がある場合に備えて、ここでそれを共有します。

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

最初の (エンコーディング) クエリでサブクエリによって生成されたテーブルを使用しなければならなかったのは、元の値 ("TestData") を、XQuery 文の xs:hexBinary() への引数として含めるためにその hex 文字列表現 ("5465737444617461") に変換する方法を見つけることができなかったからです。

これが誰かの助けになることを願っています。