Как заставить выражение 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 будет выбирать тип строки.

Другие вопросы по тегам