55

さまざまなテーブルの列を抽象化し、それらを事前にフィルター処理して事前に並べ替えるビューを作成しました。気にしない内容の列が 1 つありますが、内容が null かどうかを知る必要があります。したがって、この指定された列の値が nullでない場合は「 true 」、値が nullの場合は「false 」として、ビューはエイリアスを渡す必要があります。

T-SQLでそのようなブール値を選択するにはどうすればよいですか?

4

7 に答える 7

79

これにはCASEステートメントを使用する必要があります。

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
于 2008-10-01T11:07:45.077 に答える
27

または、次のようにすることもできます。

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
于 2011-06-17T11:55:06.403 に答える
9

ビューの列には、次のようなものを使用できます

CASE WHEN ColumnName is not null THEN 'True' ELSE 'False' END

または声明で

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 'True' ELSE 'False' END [IsAchieved]
FROM Schools s

または後でさらに処理するために、個人的に使用します

SELECT 
s.ID,
s.[Name],
CASE WHEN s.AchievedDate is not null THEN 1 ELSE 0 END [IsAchieved]
FROM Schools s
于 2008-10-01T11:11:56.687 に答える
6

実際の列がnullであるかどうかに基づいて、ビューがブール列タイプを返すようにしたいという同様の問題がありました。次のようなユーザー定義関数を作成しました。

CREATE FUNCTION IsDatePopulated(@DateColumn as datetime)
RETURNS bit
AS
BEGIN
    DECLARE @ReturnBit bit;

    SELECT @ReturnBit = 
        CASE WHEN @DateColumn IS NULL 
            THEN 0 
            ELSE 1 
        END

    RETURN @ReturnBit
END

次に、作成したビューは整数ではなくビット列を返します。

CREATE VIEW testView
AS
    SELECT dbo.IsDatePopulated(DateDeleted) as [IsDeleted] 
    FROM Company
于 2011-05-31T00:23:37.943 に答える
5

ブール値を要求しましたが、これは t-sql でビットと呼ばれます。

他の回答では、varchar の「true」と「false」、または 1 と 0 が返されました。「true」と「false」は明らかに varchar であり、ブール値ではありません。1 と 0 は整数としてキャストされると思いますが、それは確かに少しではありません。これは細かいことのように思えるかもしれませんが、型はしばしば重要です。

実際のビット値を取得するには、出力を次のように明示的にキャストする必要があります。

select case when tableName.columnName IS NULL then cast(0 as bit) else cast(1
as bit) END as ColumnLabel from tableName
于 2016-02-03T20:42:28.077 に答える