Преобразование типов данных в IBM DB2: BIGINT в VARCHAR

Я пишу запрос, чтобы сделать что-то. Но это не работает так, как я хочу:

select CORR_ID from TABLE1
where CORR_ID not in (select id from TABLE2)

Проблема в том, что TABLE2.id - это long, а TABLE1.CORR_ID - это строка.

Так как я могу заставить это работать?

PS: я использую IBM UDB.

3 ответа

Решение

Хорошо, я нашел метод:

select CORR_ID from TABLE1 where CORR_ID not in 
(select CAST( CAST(id AS CHAR(50)) AS VARCHAR(50) ) from TABLE2)

Это довольно интригующе: вы не можете наложить BIGINT на VARCHAR, но:

  • Вы можете наложить BIGINT на CHAR
  • и вы можете разыграть CHAR TO VARCHAR

это нелепо!

DB2 позволяет сравнивать столбцы VARCHAR и CHAR без дополнительного приведения, поэтому все, что вам действительно нужно, это привести число.

ВЫБЕРИТЕ corr_id ИЗ таблицы1 ГДЕ corr_id НЕ ВХОДИТ (ВЫБЕРИТЕ CHAR( id) ИЗ таблицы2)

Вы должны иметь возможность привести выбранный столбец идентификатора в соответствии с типом данных corr_id.

выберите CORR_ID из TABLE1, где CORR_ID нет в (выберите приведение (id как varchar) из TABLE2)

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