Преобразование типов данных в 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)