Преобразование типов данных в IBM DB2: BIGINT в VARCHAR - PullRequest
6 голосов
/ 24 июня 2009

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 24 июня 2009

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

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 to CHAR
  • и вы можете разыграть CHAR TO VARCHAR

это смешно!

2 голосов
/ 24 июня 2009

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

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

1 голос
/ 24 июня 2009

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

выберите CORR_ID из TABLE1 где CORR_ID отсутствует (выберите приведение (идентификатор как varchar) из TABLE2)

...