sql >> データベース >  >> RDS >> Sqlserver

SQL Server BITデータ型–究極のガイド

    ビットデータ型の概要

    データ型は、整数、文字、データ時間、バイナリデータを格納する属性を表します。さまざまな質問に対するユーザーのフィードバックを記録するためのWebアプリケーションがあるとします。複数の二分された質問と、コメントなどのテキストボックスベースの質問がいくつか含まれています。バックエンドでは、これらの応答はSQLテーブルに格納されます。

    テーブルを設計するために、列とデータベースフィールドタイプを定義します。 SQL Serverは、integer、char、varchar()、float、DateTime、numericなどのさまざまなデータ型をサポートしています。同じことがT-SQLデータ型にも適用できます。データ型の詳細については、公式ドキュメントを参照してください。ユースケースは、それらに格納したい値によって異なります。

    作成したテーブルに特定の列があるとします。これらの列は、ブール値1,0またはTRUE\Falseを受け入れます。 SQL。したがって、SQL Serverでは、特定のブールデータ型–ビット 提供されます。

    SQL Serverビットは、0、1、およびNULL値を受け入れる整数データ型です。これは、Azure SQL Server、Azureマネージドインスタンス、およびAzureVM上のSQLを含むすべてのSQLServerバージョンで利用できます。

    ビットデータ型ストレージ

    ストレージに関しては、ビットデータ型はSQLServerによって最適化されます。テーブルに8つ以下のビット列がある場合、SQLServerはそれらを1バイトとして格納します。同様に、9〜16ビット列の場合、2バイトを消費します。さらに、SQLServerは文字列値TRUEとFALSEを対応する値1と0に変換します。

    構文

    SQLServerのBITデータ型の構文は単純です。

     Bit

    ビットデータ型の実用化

    次のT-SQLスクリプトは、製品テーブルを作成し、それに2つの製品データ値を挿入します。

    • 製品が利用可能な場合、[Available]列のビットは1に設定されます。
    • 製品が利用できない場合、[Available]列のビットは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
    

    [Products]テーブルを切り捨てて、TRUE文字列とFalse文字列を使用してその値を挿入しましょう。

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

    以下に示すように、SQL Serverは文字列TRUEを1に、Falseを0に変換します。

    ただし、[はい]や[いいえ]などの他の値をビットデータ型に挿入しようとすると、「変換に失敗しました」というエラーメッセージが表示されます。

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

    ゼロ以外の値を[ビットデータ型]列に挿入すると、SQLServerはその値を1に変換します。たとえば、次のスクリプトでは、[available]列に値100を挿入します。その間、エラーメッセージは発生しません。

    レコードを選択すると、挿入された値が1であることを検証します。

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

    同様に、SQL Serverは、ビット列で負の値を値1に変換します。以下に示すように、[使用可能]列に値-100を挿入します。取得中に値1を受け取ります:

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

    以前は、製品の可用性を確認するためにビットデータ型を使用していました。通常、ビット1と0ではなくフロントエンドにテキストを表示する必要があります。したがって、SQLServerでCASEステートメントを使用できます。

    次のT-SQLコードでは、CASEステートメントは次を返します。

    • 値1:製品が利用可能です
    • 値0:在庫切れ
    SELECT [ProductName], CASE [Available]
             WHEN 1 then  'Product is available.'
            WHEN 0 then 'Out of Stock'
            ELSE 'NA'
        END AS [Availability]
    from products
    

    前に見たように、SQLServerはビットデータ型のストレージを最適化します。次の[TestTable]には、ビットデータ型の8つの列があります。したがって、ストレージに1バイトを使用します。

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

    または、 tinyintを使用する場合 またはChar(1)データ型 、各列に1バイトを消費します。ブール値が必要なのに対し、ビットデータ型を使用する必要があります。

    ブール値を返すストアドプロシージャまたは関数でビットデータ型を使用することもできます。たとえば、 fn_customer()があります。 顧客IDをチェックし、存在する場合は値を返し、それ以外の場合は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
    

    この関数には、入力パラメーターとして顧客IDが必要です。顧客ID10で実行すると、次のメッセージが表示されます。

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

    ただし、顧客IDが[SalesLT]。[Customer]に存在しない場合 テーブルの場合、関数は値0を返します。IFブロック条件は真ではありません。したがって、ELSE句で指定されたメッセージが表示されます。

    結論

    MSSQLブールデータ型-ビットデータ型は、値0、1、またはNULLを受け入れる列に役立ちます。 SQL Serverは、ビットデータ型ストレージを最適化します。したがって、コードがコンパクトで効率的になります。同様に、これを使用して、ストアドプロシージャまたは関数からブール値を返すことができます。

    また読む

    初心者向けのSQLCOALESCE関数を使用したNULL値の効果的な処理


    1. mysqlクエリの最大実行時間を設定するにはどうすればよいですか?

    2. cxを使用してUnicodeを挿入できない-Oracle

    3. SQL Server Management Studio(SSMS)を使用したデータベース設計の学習–パート2

    4. Oracleで列挙型を使用するにはどうすればよいですか?