sql >> Databáze >  >> RDS >> Sqlserver

SQL Server BIT Datatype – Ultimate Guide

Úvod do bitového datového typu

Datový typ představuje atribut, který ukládá celé číslo, znak, datový čas, binární data. Předpokládejme, že máte webovou aplikaci pro zaznamenávání zpětné vazby uživatelů na různé otázky. Obsahuje více dichotomických otázek a několik otázek založených na textových polích, jako jsou poznámky. Na backendu se tyto odpovědi ukládají do tabulky SQL.

Pro návrh tabulky definujeme sloupce a typy databázových polí. SQL Server podporuje různé datové typy, jako je integer, char, varchar(), float, DateTime, numeric, atd. Totéž lze použít pro datové typy T-SQL. Další informace o typech dat naleznete v oficiální dokumentaci. Případy použití závisí na hodnotách, které do nich chceme uložit.

Předpokládejme, že v tabulce, kterou jsme vytvořili, máme konkrétní sloupce. Tyto sloupce přijímají booleovské hodnoty 1,0 nebo TRUE\False. SQL. Proto v SQL Server, konkrétní booleovský datový typ – Bit je poskytován.

Bit serveru SQL je celočíselný datový typ, který přijímá hodnoty 0,1 a NULL. Je k dispozici ve všech verzích SQL Server, včetně Azure SQL Server, Azure Managed Instances a SQL na virtuálním počítači Azure.

Ukládání typu bitových dat

Z hlediska úložiště je datový typ Bit optimalizován serverem SQL. Pokud máte v tabulce osm nebo méně bitových sloupců, SQL Server je uloží jako 1 bajt. Podobně pro 9 až 16bitové sloupce spotřebuje 2 bajty. SQL Server navíc převádí hodnoty řetězce TRUE a FALSE na jejich odpovídající hodnoty 1 a 0.

Syntaxe

Syntaxe datového typu BIT v SQL Server je jednoduchá:

 Bit

Praktické použití typu bitových dat

Následující skript T-SQL vytvoří tabulku produktů a vloží do ní dvě hodnoty dat produktů:

  • Je-li produkt dostupný, je ve sloupci [Available] bit nastaven na 1.
  • Pokud produkt není k dispozici, je ve sloupci [Available] bit nastaven na 0.
CREATE TABLE Products (
    [ProductName] varchar(20),
    [Available] BIT
);
Go
INSERT INTO Products (productname,available) values('A',1)
INSERT INTO Products (productname,available) values('B',0)
GO
SELECT * FROM Products

Zkrátíme tabulku [Products] a vložíme její hodnoty pomocí řetězců TRUE a False.

TRUNCATE TABLE Products
INSERT INTO Products (productname,available) values('A','TRUE')
INSERT INTO Products (productname,available) values('B','False')
GO
SELECT * FROM Products

Jak je uvedeno níže, SQL Server převede řetězec TRUE na 1 a False na 0.

Pokud se však pokusíte do datového typu Bit vložit jakékoli jiné hodnoty, například Ano nebo Ne, zobrazí se chybová zpráva „Převod se nezdařil“.

INSERT INTO Products (productname,available) values('A','Yes')

Když do sloupce Bit datový typ vložíte jakoukoli nenulovou hodnotu, SQL Server tuto hodnotu převede na jednu. Například v následujícím skriptu vložíme hodnotu 100 do sloupce [available]. Během toho se nezobrazují žádné chybové zprávy.

Pokud vyberete záznamy, ověříte, že vložená hodnota je 1.

INSERT INTO Products (productname,available) values('A',100)
SELECT * FROM Products;

Podobně SQL Server převede zápornou hodnotu na hodnotu 1 ve sloupci Bit. Jak je uvedeno níže, vložíme hodnotu -100 do sloupce [dostupné]. Při načítání obdržíme hodnotu jedna:

INSERT INTO Products (productname,available) values('A',-100)
SELECT * FROM Products;

Dříve jsme pro kontrolu dostupnosti produktu používali datový typ Bit. Obvykle potřebujeme zobrazit text na front-endu místo bitů 1 a 0. Proto můžeme na SQL Serveru použít příkaz CASE.

V následujícím kódu T-SQL vrátí příkaz CASE:

  • Hodnota 1:Produkt je dostupný
  • Hodnota 0:Není skladem
SELECT [ProductName], CASE [Available]
         WHEN 1 then  'Product is available.'
        WHEN 0 then 'Out of Stock'
        ELSE 'NA'
    END AS [Availability]
from products

Jak jsme mohli vidět dříve, SQL Server optimalizuje úložiště pro datový typ Bit. Následující [TestTable] má osm sloupců s datovým typem Bit; proto používá 1 bajt pro úložiště.

CREATE TABLE TestTable (
    [Column1] Bit,
    [Column2] Bit,
    [Column3] Bit,
    [Column4] Bit,
    [Column5] Bit,
    [Column6] Bit,
    [Column7] Bit,
    [Column8] Bit,
);

Případně, pokud použijete tinyint nebo Datový typ Char(1) , spotřebovalo by to 1 bajt pro každý sloupec. Měli byste použít datový typ Bit, zatímco požadujete booleovskou hodnotu.

Datový typ Bit můžete také použít v uložených procedurách nebo funkcích, které vracejí booleovské hodnoty. Máme například fn_customer() funkce, která kontroluje ID zákazníka, a pokud existuje, vrátí hodnotu jedna, vrátí 0.

CREATE FUNCTION fn_customer
(
   @CustomerID INT
)
RETURNS bit
AS
BEGIN
IF EXISTS (
SELECT [CustomerID] FROM [SalesLT].[Customer] 
WHERE [CustomerID][email protected] 
)
      RETURN 1
    RETURN 0
 END

Tato funkce vyžaduje ID zákazníka jako vstupní parametr. Pokud jej provedeme s ID zákazníka 10, dostanete následující zprávu:

IF (dbo.fn_customer(10)=1)
   PRINT 'Customer record is available'
ELSE 
   PRINT 'Customer record is not available'

Pokud však ID zákazníka v [SalesLT].[Customer] neexistuje tabulka, funkce vrátí hodnotu 0. Podmínka bloku IF není pravdivá. Proto dostanete zprávu uvedenou v klauzuli ELSE:

Závěr

Booleovský datový typ MSSQL-bitový datový typ je užitečný pro sloupce přijímající hodnoty 0,1 nebo NULL. SQL Server optimalizuje úložiště datového typu Bit; proto je kód kompaktní a efektivní. Podobně jej můžete použít k vrácení booleovských hodnot z uložené procedury nebo funkce.

Přečtěte si také

Efektivní zpracování hodnot NULL pomocí funkce SQL COALESCE pro začátečníky


  1. Jak najdu duplicitní hodnoty v tabulce v Oracle?

  2. SQL ORDER BY:5 Co dělat a co nedělat pro třídění dat jako profesionál

  3. určení znakové sady tabulky / databáze?

  4. Jak zkontrolovat stav PostgreSQL serveru Mac OS X