Wie bitweise Exklusiv-ODER in SQL-Server zwischen zwei Binärarten zu tun?

8

Nach diesem Link: Bitweise Operatoren (Transact-SQL) wir können eine bitweise Operation zwischen binary und int, smallint, tinyint oder umgekehrt durchführen.

Aber wie kann ich ein bitweises exklusives ODER in SQL-Server zwischen zwei Binärarten machen? Oder wenn das nicht möglich ist, wie kann ich ein binäres / varbinary auf einzelne Bytes aufteilen?

Der Grund, warum ich darum bitt, ist, weil ich zwei Zahlen größer als max int Wert haben muss. Danke.

    
tenkod 28.01.2011, 22:48
quelle

4 Antworten

6

Alle Kommentare im Codeblock

%Vor%     
RichardTheKiwi 29.01.2011, 03:18
quelle
2

Pro Bitwise Exclusive-Dokumentation :

  

Hinweis

     

Es kann nur ein Ausdruck vom Datentyp binary oder varbinary sein   in einer bitweisen Operation.

    
Joe Stefanelli 28.01.2011 22:55
quelle
2

Der Kommentar in der Frage von Martin, gab mir eine Idee, wie man binär aufteilt, damit ich die Werte XORIEREN kann. Ursprünglich wollte ich zwei GUIDs in sql XOR. Also hier ist der Code, mit dem ich kam:

%Vor%

Die Funktion zum Konvertieren einer binären in eine hexadezimale Zeichenfolge lautet: Binärdaten in hexadezimale Zeichenfolge konvertieren

Ich weiß, dass wir in SQL 2008 die Funktion convert verwenden können, um dies zu tun, wie in diesem Post erklärt: SQL Server 2008: neue binäre - hex String-Konvertierung , aber das war in meinem Fall keine Option.

Es ist jedoch gut, wenn jemand eine bessere Idee hat, wie wir bitweise SQL-Operationen für Binärdaten verwenden können.

BEARBEITEN:

Danke an cyberkiwi für den richtigen Algorithmus und für den Fehler in meinem Code. Dieser Code könnte für die Binärdatei XOR-ing aber nicht für GUIDs gut sein, da GUIDs unterschiedliche Byte-Reihenfolge für erste und letzte 8 Byte haben. Bitte beachten Sie die Wikipedia-Erklärung dafür: GUID Grundstruktur . Beachten Sie, dass Sie, wenn Sie das XOR-ed-Ergebnis als echte GUID verwenden möchten, die Versions-Bits berücksichtigen und berücksichtigen sollten.

    
tenkod 29.01.2011 01:07
quelle
1

Ich habe Bigints zum Speichern beider Werte verwendet. Auf diese Weise erhalten Sie mehr Reichweite. Wenn der Wert größer als bigint ist, müssen Sie möglicherweise die Werte in zwei Bigint aufteilen und die Kombination AND / OR-Operator verwenden.

    
Gaurav B. 28.01.2011 23:05
quelle

Tags und Links