Ist es möglich, 1 oder 0 als Bit auszudrücken, wenn es als Feldwert in einer select-Anweisung verwendet wird?
z.B
In diesem Fall ist die Anweisung (die Teil einer select-Anweisung ist) ICourseBased vom Typ int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Um es zu einem Bit-Typ zu machen, muss ich beide Werte umwandeln.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Gibt es eine kurze Möglichkeit, die Werte als Bittyp auszudrücken, ohne jedes Mal umwandeln zu müssen?
(Ich verwende MS SQL Server 2005)
sql
sql-server
tsql
bit
Damien McGivern
quelle
quelle
Sie können das zweite Snippet als Felddefinition für ICourseBased in einer Ansicht hinzufügen.
quelle
Nein, aber Sie können den gesamten Ausdruck und nicht die Unterkomponenten dieses Ausdrucks umwandeln. Das macht es in diesem Fall wahrscheinlich weniger lesbar.
quelle
Etwas kondensierter als die von gbn:
Angenommen,
CourseId
ist nicht NullCOALESCE
ist wie einISNULL()
, gibt aber die erste Nicht-Null zurück.Eine Nicht-Null
CourseId
wird vom Typ in eine 1 umgewandelt, während eine NullCourseId
bewirkt, dass COALESCE den nächsten Wert 0 zurückgibtquelle
Wenn Sie möchten, dass die Spalte BIT und NICHT NULL ist, sollten Sie ISNULL vor CAST setzen.
quelle
Unglücklicherweise nicht. Sie müssen jeden Wert einzeln umwandeln.
quelle
Der in SELECT zu verwendende Ausdruck könnte sein
quelle
case when ... else ... end
, hat man noch zu gegossenen1
und0
mit dem BIT - Typ.Genießen Sie dies :) Ohne jeden Wert einzeln zu besetzen.
quelle