Что не так с моим делом? - PullRequest
4 голосов
/ 14 марта 2012

CASE WHEN table1.text IS NULL THEN table2.numbers ELSE table1.text END AS newcolumn

При запуске этого кода я получаю эту ошибку: ОШИБКА: символы типа CASE меняются и целое не может быть сопоставлено

Можно подумать, что это не вызовет проблем, так как я создаю новый столбец в своем запросе. Я также хотел бы отметить, что я использую старую версию PostgreSQL, если это поможет.

Ответы [ 5 ]

5 голосов
/ 14 марта 2012

Проблема в том, что вы пытаетесь добавить table1.text и table2.numbers в один столбец.Эти два столбца представляют собой два разных типа данных.попробуйте следующий

CASE WHEN table1.text IS NULL THEN CAST(table2.numbers AS VARCHAR(50)) ELSE table1.text END AS newcolumn
4 голосов
/ 14 марта 2012
CASE WHEN table1.text IS NULL THEN table2.numbers::text ELSE table1.text END AS newcolumn
1 голос
/ 14 марта 2012

Тип данных, представленный table2.numbers и table1.text, должен быть одинаковым, поэтому в этом случае вам нужно будет CAST значение table2.numbers

0 голосов
/ 14 марта 2012

Я думаю, что ошибка довольно очевидна - типы двух столбцов, которые могут использоваться оператором CASE, несовместимы.

Почему вы думаете, что пытаетесь использовать значения из двух столбцов разныхтипы не вызовут проблем?Возможно, вы создаете новый столбец в наборе результатов, но он по-прежнему должен иметь тип, который должен соответствовать всем потенциальным значениям.

Во многих случаях он может сделать выводтипа, но это рискованно и не обязательно может быть выбором, который вы хотите сделать, поэтому лучше заставить его принять решение.Вам необходимо изменить тип одного или других столбцов в операторе CASE.

0 голосов
/ 14 марта 2012

Попробуйте ISNULL

CASE WHEN ISNULL(table1.text) = 1 THEN table2.numbers ELSE table1.text END AS newcolumn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...