Bitmanipuleringsfunktioner

Gäller för: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft Fabric SQLdatabase in Microsoft Fabric

Bitmanipulationsfunktioner som att flytta, hämta (hämta), sätta eller räkna enskilda bitar inom ett heltals- eller binärt värde gör att du kan bearbeta och lagra data mer effektivt än med enskilda bitar.

En bit har två värden (1 eller 0, som representerar on eller off, eller true eller false). En byte består av en sekvens av 8 bitar. Bitmanipulationsfunktioner i SQL Server behandlar den "vänstra" biten i en byte som den största (den mest betydelsefulla). För bitmanipulationsfunktionerna numreras bitarna från höger till vänster, där biten 0 är höger, minsta och bit 7 är vänster och störst.

Till exempel är en binär följd av 00000111 decimalmotsvarigheten till talet 7. Du kan räkna ut detta med hjälp av potenser av 2 på följande sätt:

00000111 = (2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7)

Detta innebär i praktiken att medan SQL Server lagrar detta värde som 11100000 (byte-reversed), kommer bitmanipulationsfunktionerna att behandla det som om det vore 00000111.

När man tittar på flera bytes är den första byten (läst från vänster till höger) den största.

Du kan använda följande bilder för att visualisera hur SQL Servers bitmanipulationsfunktioner tolkar bit- och byteuttrycksvärden samt bitoffsets.

int

Diagram som visar ett int-värde där 4 byte representerar den omvända binären för varje byte från vänster till höger.

smallint

Diagram som visar ett litet int-värde där den första byten representerar bitarna 15 till 8, och den andra byten representerar bitarna 7 till 0.

Functions

Det finns fem funktioner tillgängliga för att hantera bitar i SQL Server:

Alla fem funktioner är avsedda att arbeta på tinyint, smallint, int, bigint, binär(n) och varbinär(n) datatyper.

Följande typer stöds inte: varchar, nvarchar, image, ntext, text, xml och table.

Anmärkningar

I den initiala implementeringen kommer Distributed Query-funktionalitet för bitmanipulationsfunktioner inom länkade servrar eller ad hoc-frågor (OPENQUERY) inte att stödjas.