Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Unsigned right shift '>>>' Operador no servidor sql


O T-SQL não tem operadores de deslocamento de bits, então você teria que implementar um por conta própria. Há uma implementação de deslocamentos bit a bit aqui:http ://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/

Você teria que converter seu inteiro para um varbinary, usar a função de deslocamento bit a bit e converter de volta para integer e (espero) hey-presto! Aí está o resultado que você está esperando.

A implementação e o teste são deixados como exercício para o leitor...

Edit - Para tentar esclarecer o que coloquei nos comentários abaixo, executar este SQL demonstrará os diferentes resultados fornecidos pelos vários 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

Resultados:
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