Eu sou novo aqui, então seja gentil comigo. Tenho o seguinte cenário:
Eu tenho muitas tabelas que, por uma questão de simplicidade, são representadas em uma View no meu banco de dados MySQL. Meu problema é que preciso de um valor nessa view representando se é um tipo de evento ou outro (um booleano simples), que tentei alcançar com:
`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
O resultado é representado como int e, portanto, é lido pelo Entity Framework. O problema é que eu realmente preciso de um valor de retorno booleano, que tentei alcançar com:
CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent`
Isso resultou em um erro, que não é exibido para mim no MySQL Workbench (só recebo aquele irritante "Você tem um erro em ...").
Vocês podem por favor me ajudar?
Tentei resolver isso na minha aplicação, mas eu realmente prefiro isso resolvido no banco de dados, pois ele será usado por outros softwares posteriormente.
Tente usar a
IF()
função:ou
Mesmo sem a
IF()
função, rodandorendimento 0 ou 1 usando o cliente mysql
O problema é este:
CAST()
e só pode aceitar e devolver os seguintes tipos :CONVERT()
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
Como
BOOLEAN
não está nesta lista, ela nunca pode ser retornada porCAST()
ouCONVERT()
Você pode usar a
IF()
função para gerar stringsVocê pode fazer isso de maneira muito simples, sem usar a instrução IF() redundante:
Você também pode tentar a coerção booleana clássica:
SELECIONE NÃO NÃO (tanto faz);
O bom disso é que preserva naturalmente os NULLs, enquanto a maioria das respostas aqui não.
Se você quiser coagir NULL para FALSE, faça
SELECT IFNULL(NOT NOT (qualquer que seja), FALSE);
Isso é atualmente impossível.
BOOLEAN
tipo real (ou um tipo de matriz real .. ou um tipo JSON real). Tem um alias paraTINYINT
.'true' IS TRUE
e1=1
ambos retornam1
como um arquivoint
.TINYINT
formato.Tanto quanto eu posso dizer, você não pode rebaixar um tipo, nem produzir um tinyint em um arquivo
SELECT
.Eu sugiro a migração para o PostgreSQL. É muito menos aterrorizante... e libertador.
Você também pode usar "CASE":
SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName
CAST(IF(col_name = 1, 'true', 'false') AS JSON)
pode funcionar para alguns casos de uso.A partir do MySQL 5.7.8, há suporte para um tipo de dados JSON nativo definido pela RFC 7159. Para meu caso de uso, eu tinha uma
INT
coluna que sempre era 0 ou 1, mas precisava da saída como booltrue
oufalse
não string "true" ou "falso".https://dev.mysql.com/doc/refman/5.7/en/json.html#json-converting-between-types