Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

spostamento a destra non firmato '>>>' Operatore nel server sql

T-SQL non ha operatori di spostamento dei bit, quindi dovresti implementarne uno tu stesso. C'è un'implementazione di spostamenti bit a bit qui:http ://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/

Dovresti eseguire il cast del tuo intero su un varbinary, usare la funzione di spostamento bit per bit e tornare a integer e (si spera) hey-presto! Ecco il risultato che ti aspetti.

L'implementazione e il test sono lasciati come esercizio per il lettore...

Modifica - Per cercare di chiarire cosa ho inserito nei commenti qui sotto, l'esecuzione di questo SQL dimostrerà i diversi risultati forniti dai vari 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

Risultati:

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