Jestem tu nowy, więc bądź dla mnie miły. Mam następujący scenariusz:
Mam wiele tabel, które dla uproszczenia są reprezentowane w widoku w mojej bazie danych MySQL. Mój problem polega na tym, że potrzebuję wartości w tym widoku, która reprezentuje, czy jest to jedno lub drugie zdarzenie (zwykła wartość logiczna), które starałem się osiągnąć za pomocą:
`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
Wynik jest reprezentowany jako int, a więc jest odczytywany przez Entity Framework. Problem polega na tym, że naprawdę potrzebuję logicznej wartości zwracanej, którą próbowałem osiągnąć za pomocą:
CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent`
Spowodowało to błąd, który nie jest wyświetlany mi w MySQL Workbench (otrzymuję tylko irytujące „Masz błąd w ...”).
Czy możecie mi pomóc?
Próbowałem go rozwiązać w mojej aplikacji, ale naprawdę wolę to rozwiązane w bazie danych, ponieważ później będzie ono używane przez inne oprogramowanie.
tinyint
. Pod żadnym pozorem nieIF
zwraca się,tinyint
więc nie widzę, jak ta odpowiedź jest poprawna lub zaakceptowana.Możesz to zrobić w bardzo prosty sposób, bez użycia zbędnej instrukcji IF ():
źródło
Możesz także spróbować klasycznego przymusu boolowskiego:
NIE WYBIERAJ (cokolwiek);
Zaletą tego jest to, że naturalnie zachowuje wartości NULL, podczas gdy większość odpowiedzi tutaj nie.
Jeśli chcesz zmusić NULL do FAŁSZ, to zrób
WYBIERZ IFNULL (NIE NIE (cokolwiek), FAŁSZ);
źródło
Możesz także użyć „CASE”:
SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName
źródło
Jest to obecnie niemożliwe.
BOOLEAN
typu (ani prawdziwego typu tablicy .. ani prawdziwego typu JSON). Ma alias dlaTINYINT
.'true' IS TRUE
i1=1
zwracają1
jak azotan amonuint
.TINYINT
formatu.O ile mogę ci powiedzieć, nie możesz ani obniżyć typu, ani wyprodukować malutkiego w
SELECT
.Chciałbym bardzo sugerować migracji do PostgreSQL. To o wiele mniej przerażające ... i wyzwalające.
źródło
źródło