Spalte mit Base64 codieren

F

FlorianF

Guest
Hi Leute,

ich will die Werte einer Spalte in einer Abfrage mit Base64 kodieren.

Ich habe diesen Code gefunden, der das wohl realisieren soll, aber ich bekomme es nicht ans Laufen bzw. ich weiß nicht, wie ich ihn an meine Tabellen und Spalten anpassen muss.


Meine Tabelle heißt "Kunden" und die Spalten sind "ID", "Name" and "Kundennummer". Ich würde gerne alle Spalten in Klartext und kodiert mit Base64 daneben anzeigen lassen in der Abfrage.

Code:
declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max)
set @source = convert(varbinary(max), 'Hello Base64')
set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable("@source")', 'varchar(max)')
set @decoded = cast('' as xml).value('xs:base64Binary(sql:variable("@encoded"))', 'varbinary(max)')
select
convert(varchar(max), @source) as source_varchar,
@source as source_binary,
@encoded as encoded,
@decoded as decoded_binary,
convert(varchar(max), @decoded) as decoded_varchar

Kann jemand unterstützen? :)

Danke euch!!
 
Werbung:
also ich kann Dir zeigen, wie es mit meiner DB geht:

Code:
edb=*# select * from florianf ;
                                   t                                   
-----------------------------------------------------------------------
 Hi Leute,
 ich will die Werte einer Spalte in einer Abfrage mit Base64 kodieren.
 Ich habe diesen Code gefunden, der das wohl realisieren soll, ...
(3 rows)
edb=*# with foo as (select t, encode(convert_to(t,'UTF8'),'base64') as base64 from florianf ) select *, convert_from(decode(base64,'base64'),'UTF8') as original from foo;
                                   t                                   |                                    base64                                    |                               original                                
-----------------------------------------------------------------------+------------------------------------------------------------------------------+-----------------------------------------------------------------------
 Hi Leute,                                                             | SGkgTGV1dGUs                                                                 | Hi Leute,
 ich will die Werte einer Spalte in einer Abfrage mit Base64 kodieren. | aWNoIHdpbGwgZGllIFdlcnRlIGVpbmVyIFNwYWx0ZSBpbiBlaW5lciBBYmZyYWdlIG1pdCBCYXNl+| ich will die Werte einer Spalte in einer Abfrage mit Base64 kodieren.
                                                                       | NjQga29kaWVyZW4u                                                             | 
 Ich habe diesen Code gefunden, der das wohl realisieren soll, ...     | SWNoIGhhYmUgZGllc2VuIENvZGUgZ2VmdW5kZW4sIGRlciBkYXMgd29obCByZWFsaXNpZXJlbiBz+| Ich habe diesen Code gefunden, der das wohl realisieren soll, ...
                                                                       | b2xsLCAuLi4=                                                                 | 
(3 rows)

edb=*#

vielleicht hilft es ja ...
 
Sieht gut aus. Aber ich verstehe nicht, was bei Deiner Antwort jetzt der SQL Befehl ist, den ich nutzen muss :D
 
nun ja, im CTE-Teil muß ich zuerst den Text mittels convert_to nach BYTEA bringen, was ich dann mit encode zu base64 mache, und im select-Teil, der das dann zurück verwandelt, via decode von base64 nach BYTEA und das dann via convert_fom von BYTEA nach UTF8-Text.

Aber vermutlich wird es so diese Funktionen bei Dir nicht geben.
 
Sorry, aber ich kapier es nicht. Ich meinte mit "sieht gut aus", dass es bei Dir aussieht. Bei mir allerdings nicht, da ich nicht weiß, welche SQL ich nutzen muss bei mir. Deine Antwort oben verwirrt mich ;)
 
wo ist das Problem? Ich habe eine Konsole, in der ich SQL-Befehle eingebe und die Ausgabe bekommt, all das ist da zu sehen... also sowohl die SQL-Befehle als auch die Antworten darauf von der Datenbank. Das ist aber eben kein M$SQL, sondern PostgreSQL mit psql als Client.
 
declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max) set @source = convert(varbinary(max), 'Hello Base64')
Du verstehst Deinen "eigenen" Code nicht?
"Eigen", weil kopiert und verändert? Das Ergebnis Deiner Mühen verstehe ich auch nicht.

Vielleicht versuchst Du mal den Prozess rückwärts zu gehen und Deine ganzen Variablen zu entfernen und ein funktionierendes SQL daraus zu machen, in dem man dann auch sieht, was was ist?
 
Wie ich geschrieben habe, bin ich absoluter Anfänger und habe den Code im Internet gefunden. Daher verstehe ich ihn in der Tat nicht und daher habe ich mich an Euch gewandt.

Schade, dass jetzt eine Diskussion draus wird.
 
Naja, Diskussion ist relativ. Sagt mir bitte, wie es geht, ist keine Diskussion. Auch nicht, wenn man gefledderten Code dazu legt.
Das Prinzip ist immer, dass man Verständnisfragen anhand eines Beispiels stellt.

Beispiel:
Warum wird die Variable @source angelegt.
usw. das ganze am besten natürlich anhand eines funktionierenden Beispiels.

Hier ist ein Beispiel, dass ich aus dem Netz kopiert und zu einem (2 stufigen) Select geändert habe.
Code:
SELECT 
  'HELLO' as ascii_,
  -- zweite Konvertierung nach Hex, dann base64
  CAST(N'' AS XML).value(
                         'xs:base64Binary(xs:hexBinary(sql:column("cast_binary_")))'
                       , 'NVARCHAR(MAX)'
                        ) cast_base64_
  FROM ( -- erste Konvertierung zu Binär
        SELECT CAST('HELLO' AS VARBINARY(MAX)) AS cast_binary_
       ) AS to_binary
 
Ok.Danke.
Da steige ich jetzt langsam durch. Ich weiß nur nicht, wie ich die Test-Strings jetzt mit Daten aus meiner Tabelle ersetze. Also auf die Tabelle und Spalte verweise im SELECT und FROM.
 
Das sind SQL Grundlagen:

Was ergibt:
Select 1
Select 'FlorianF'
Select 'FlorianF' as Ergebnis

?
Und was ergibt:
Select 1 from <SetzeEineVorhandeneTabelleEin>
..
usw.

Alle Beispiel oben arbeiten mit der Selection eines Konstanten Ausdrucks, zuerst ohne FROM, dann mit FROM <Tabelle>.
Was bedeutet das?

Und dann:
Was würde geschehen, wenn Du in den Beispielen statt der Selection eines konstanten Ausdrucks einen Feldnamen einträgst? Wieder ohne FROM/ mit FROM?
 
Die Grundlagen kann, die Grundlagen.

Aber bei der Verschachtelung blick ich nicht durch.

Ich habe es jetzt mal soweit gebaut aber bekomme einen Fehler.

Code:
SELECT Name,
    cast('' as xml).value(
        'xs:base64Binary(sql:column("name_binary"))', 'varchar(max)'
    )

    SELECT CAST(
        Name AS VARBINARY(MAX)
        )
    FROM Kunden
        AS name_binary)    AS to_binary

Fehler lautet:

Meldung 102, Ebene 15, Status 1, Zeile 10
Incorrect syntax near ')'.

Ich verstehe allerdings nicht, warum hier einige Nachrichten so auf Angriff gehen. Wirklich schade.
 
Werbung:
Das ist aber auch anders als gezeigt. Denn dort fehlt das CAST und das verstehe ich nicht.

Naja ich gebe auf, hier. Es kostet mehr Energie sich zu verteidigen, als diese sinnvoll in die Lösung einzusetzen.

Schade, aber so scheint es hier wohl zu sein.
 
Zurück
Oben