나는 여기 새로 왔기 때문에 나에게 친절하십시오. 다음과 같은 시나리오가 있습니다.
단순화를 위해 MySQL 데이터베이스의 View에 표시되는 많은 테이블이 있습니다. 내 문제는 이벤트의 일종인지 또는 간단한 부울인지를 나타내는이 뷰에 값이 필요하다는 것입니다.
`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`
결과는 int로 표시되므로 Entity Framework에서 읽습니다. 문제는 실제로 부울 리턴 값이 필요하다는 것입니다.
CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent`
이로 인해 MySQL Workbench에서 나에게 표시되지 않는 오류가 발생했습니다 (귀찮은 “당신은 오류가 있습니다 …”).
제발 도와주세요?
내 응용 프로그램에서 해결하려고 시도했지만 나중에 다른 소프트웨어에서 사용되기 때문에 데이터베이스 에서이 문제를 해결하는 것이 좋습니다.
답변
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, TRUE, FALSE)
FROM ...
또는
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 1, 0)
FROM ...
IF 기능이 없어도
mysql> select ('rolando' = 'rolando') str_compare;
+-------------+
| str_compare |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
mysql>
mysql 클라이언트를 사용하여 0 또는 1을 산출하십시오
문제는 이것입니다. CAST () 및 CONVERT () 는 다음 유형 만 허용하고 리턴 할 수 있습니다 .
- 이진 [(N)]
- CHAR [(N)]
- 날짜
- 날짜 시간
- 십진법 [(M [, D])]
- 서명 [INTEGER]
- 시각
- 서명되지 않은 [INTEGER]
BOOLEAN이이 목록에 없으므로 CAST 또는 CONVERT에서 반환 할 수 없습니다.
IF 함수를 사용하여 문자열을 생성 할 수 있습니다
SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 'TRUE', 'FALSE')
FROM ...
답변
중복 IF () 문을 사용하지 않고도 매우 간단한 방법으로 수행 할 수 있습니다.
... `YourField` IS NOT NULL AS `YourField` ...
답변
고전적인 부울 강제 변환을 시도 할 수도 있습니다.
NOT NOT (무엇이든);
이것에 대한 좋은 점은 자연스럽게 NULL을 유지하지만 여기서 대부분의 대답은 그렇지 않습니다.
NULL을 FALSE로 강제하려면 다음을 수행하십시오.
선택 IFNULL (아무것도 아닙니다, FALSE);
답변
“CASE”를 사용할 수도 있습니다.
SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName
답변
이것은 현재 불가능합니다.
- MySQL에는 실제
BOOLEAN
유형 (또는 실제 배열 유형 또는 실제 JSON 유형)이 없습니다. 에 대한 별칭이TINYINT
있습니다. - 모든 조건은 정수를 반환합니다. 이것은 CPU에 가장 빠른 데이터 유형이며 아마도이 구현 세부 사항이 여기에 반영됩니다. 예, 들어
'true' IS TRUE
와1=1
모두 반환1
하여 ASint
. - CAST는
TINYINT
형식을 제공하지 않습니다 .
내가 알 수있는 한 유형을 강등하거나 a에서 tinyint를 생성 할 수 없습니다 SELECT
.
나는 것이 매우 PostgreSQL을 마이그레이션하는 것이 좋습니다. 훨씬 덜 무섭고 해방 적입니다.
답변
MySQL 함수 CAST_TO_BIT 사용
예 :
SELECT CAST_TO_BIT(1);
MySQL : SELECT CAST_TO_BIT (0) ; -> jdbc 드라이버-> Java : 부울 false ;
MySQL : SELECT CAST_TO_BIT (1) ; -> jdbc 드라이버-> Java : 부울 true ;
MySQL : SELECT CAST_TO_BIT (NULL) ; -> jdbc 드라이버-> Java : NULL ;