Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Décalage à droite non signé '>>>' Opérateur dans le serveur sql

T-SQL n'a pas d'opérateurs de décalage de bits, vous devrez donc en implémenter un vous-même. Il y a une implémentation d'un décalage au niveau du bit ici :http ://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/

Vous devriez convertir votre entier en varbinary, utiliser la fonction de décalage au niveau du bit et retransformer en entier et (espérons-le) hé-presto ! Voilà votre résultat que vous attendez.

L'implémentation et les tests sont laissés en exercice au lecteur...

Edit - Pour essayer de clarifier ce que j'ai mis dans les commentaires ci-dessous, l'exécution de ce SQL démontrera les différents résultats donnés par les différents CAST :

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

Résultats :

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