Czy można wyrazić 1 lub 0 jako bit, gdy jest używany jako wartość pola w instrukcji select?
na przykład
W tym przypadku instrukcja (która jest częścią instrukcji select) ICourseBased jest typu int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Aby był bitowy, muszę rzutować obie wartości.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Czy istnieje krótki sposób wyrażania wartości jako typu bitowego bez konieczności rzutowania za każdym razem?
(Używam MS SQL Server 2005)
sql
sql-server
tsql
bit
Damien McGivern
źródło
źródło
Możesz dodać drugi fragment kodu jako definicję pola dla ICourseBased w widoku.
źródło
Nie, ale możesz rzucić całą ekspresję zamiast jej części składowych. Właściwie to prawdopodobnie czyni go mniej czytelnym w tym przypadku.
źródło
Nieco bardziej skondensowane niż gbn:
Zakładając, że
CourseId
jest niezerowaCOALESCE
jest jak anISNULL()
, ale zwraca pierwszą wartość różną od Null.Niezerową
CourseId
dostanie typu obsady na 1, natomiast zerowaCourseId
spowoduje COALESCE wrócić następnego wartość 0źródło
Jeśli chcesz, aby kolumna była BIT i NIE NULL, powinieneś umieścić ISNULL przed CAST.
źródło
Niestety nie. Będziesz musiał rzucać każdą wartość indywidualnie.
źródło
Wyrażeniem, które ma być użyte wewnątrz polecenia SELECT, mogłoby być
źródło
case when ... else ... end
, nadal trzeba rzucać1
i0
do typu BIT.Ciesz się tym :) Bez odlewania każdej wartości indywidualnie.
źródło