web-dev-qa-db-ja.com

列の内容に基づいてT-SQLでブール値を出力する方法は?

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

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

48
Anheledir

これには[〜#〜] case [〜#〜]ステートメントを使用する必要があります。

SELECT CASE WHEN columnName IS NULL THEN 'false' ELSE 'true' END FROM tableName;
72
Adam Bellaire

または、次のようにできます:

    SELECT RealColumn, CAST(0 AS bit) AS FakeBitColumn FROM tblTable
23
Schnapz

ブール値としての出力が必要な場合

CAST(CASE WHEN colName IS NULL THEN 0  ELSE 1   END as BIT) aIsBooked
18
Mahesh

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

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
9
tocsoft

実際の列が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
6
lcrepas

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
4
Steve Sether