Как заставить выражение MySQL возвращать целочисленное значение?
У меня есть две таблицы в MySQL, как показано ниже:
Table1
держит вопросы
qid tid qtype
101 1 1
102 1 2
103 1 3
104 1 4
Вот qtype
это тип вопроса, где qtype
1 и 2 принимают числовые значения, а 3 и 4 принимают строку. Я объявил qtype
как varchar
колонка.
Таблица2 содержит ответы
sid qid qtype qanswer
1 101 1 10
1 102 2 20
1 103 3 o1
1 104 4 o2
есть строки для каждого вопроса для каждого 'sid'.
Я выбрал данные ниже, используя следующий запрос:
select a.sid, MAX(CASE WHEN (a.qid = 101) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '101' ,
MAX(CASE WHEN (a.qid = 102) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '102' ,
MAX(CASE WHEN (a.qid = 103) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '103' ,
MAX(CASE WHEN (a.qid = 104) THEN if(a.qtype in(1,2),cast(a.qanswer as unsigned),a.qanswer) ELSE NULL END) AS '104' from Table2 a join Table1 b on a.qtype = b.qtpe where b.tid = 1
sid 101 102 103 104
1 10 20 o1 o2
2 30 15 o2 o1
Я хотел выбрать qtype
1 и 2 как целое число, поэтому я использовал приведенный ниже запрос в своем запросе:
if(qtype in (1,2),cast(qanswer as unsigned),qanswer)
Я не получаю ответ за qtype
1 и 2 по желанию. Я взял ссылку на этот вопрос
Я тоже пробовал convert
вместо приведения, но получил тот же результат. Как я могу бросить qtype
1 и 2 как целое число?
Как вернуть целочисленное значение из выражения MySQL.
1 ответ
Это не утверждение
if(qtype in (1, 2), cast(qanswer as unsigned), qanswer)
Это выражение. Выражение возвращает скалярное значение с одним типом. MySQL должен решить, является ли возвращаемый тип unsigned
или же varchar
, потому что он должен выбрать один для всего выражения.
Похоже, MySQL будет выбирать тип строки.