Dekodowanie ciągu Base64 Natywnie w SQL Server

15

Mam varcharkolumnę w tabeli w programie SQL Server, która zawiera ciąg tekstowy zakodowany w standardzie base64, który chciałbym zdekodować do postaci zwykłego tekstu

Czy SQL Server ma jakąkolwiek natywną funkcjonalność do obsługi tego typu rzeczy?

Przykładowy ciąg base64:

cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==

Który dekoduje:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
GWR
źródło

Odpowiedzi:

20

Domyśliłam się:

SELECT 
    CONVERT
    (
        VARCHAR(MAX), 
        CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')
    ) AS RESULT
FROM
    (
        SELECT 'cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==' AS BASE64_COLUMN
    ) A

Wynik:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

Wystarczy zamienić się BASE64_COL_NAMEdo nazwy kolumny, czy można zastąpić sql:column("BASE64_COLUMN")ze sql:variable("@base64variable")jeśli chcemy korzystać z zadeklarowaną zmienną np jeśli robią funkcję, czy coś.

Wykorzystuje transformację XSL przy użyciu wbudowanej funkcji XML (od SQL Server 2005)

GWR
źródło