Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

unsigned right shift '>>>' Operator im SQL-Server

T-SQL hat keine Bitverschiebungsoperatoren, also müssten Sie selbst einen implementieren. Hier gibt es eine Implementierung einer bitweisen Verschiebung:http ://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/

Sie müssten Ihre Ganzzahl in eine Varbinärdatei umwandeln, die bitweise Verschiebungsfunktion verwenden und zurück in eine Ganzzahl umwandeln und (hoffentlich) hey-presto! Da ist Ihr Ergebnis, das Sie erwarten.

Das Implementieren und Testen bleibt dem Leser als Übung überlassen...

Bearbeiten - Um zu verdeutlichen, was ich in die Kommentare unten geschrieben habe, zeigt die Ausführung dieser SQL die unterschiedlichen Ergebnisse der verschiedenen CASTs:

SELECT -5381 AS Signed_Integer,
        cast(-5381 AS varbinary) AS Binary_Representation_of_Signed_Integer,
        cast(cast(-5381 AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Big_Integer, 
        cast(cast(-5381 AS varbinary) AS bigint) AS Signed_Integer_Transposed_onto_Big_Integer, 
        cast(cast(cast(-5381 AS varbinary) AS bigint) AS varbinary) AS Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer

Ergebnisse:

Signed_Integer Binary_Representation_of_Signed_Integer                        Binary_Representation_of_Signed_Big_Integer                    Signed_Integer_Transposed_onto_Big_Integer Binary_Representation_of_Signed_Integer_Trasposed_onto_Big_Integer
-------------- -------------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ------------------------------------------------------------------
-5381          0xFFFFEAFB                                                     0xFFFFFFFFFFFFEAFB                                             4294961915                                 0x00000000FFFFEAFB