Conversion de types de données dans IBM DB2: BIGINT to VARCHAR
Question
J'écris une requête pour faire des choses. Mais cela ne fonctionne pas comme je le souhaite:
select CORR_ID from TABLE1
where CORR_ID not in (select id from TABLE2)
Le problème est que TABLE2.id est long, alors que TABLE1.CORR_ID est une chaîne.
Alors, comment puis-je le faire fonctionner?
PS: j'utilise IBM UDB.
La solution
OK, j'ai trouvé une méthode:
select CORR_ID from TABLE1 where CORR_ID not in
(select CAST( CAST(id AS CHAR(50)) AS VARCHAR(50) ) from TABLE2)
C'est assez intriguant: vous ne pouvez pas convertir un BIGINT en VARCHAR, mais:
- vous pouvez lancer un BIGINT en CHAR
- et vous pouvez lancer un CHAR TO VARCHAR
c'est ridicule!
Autres conseils
DB2 permet de comparer une colonne VARCHAR à une colonne CHAR, sans transtypage supplémentaire. Il vous suffit donc de convertir le nombre.
SELECT corr_id FROM table1 WHERE corr_id PAS IN (SELECT CHAR (id) FROM table2)
Vous devriez pouvoir convertir la colonne id sélectionnée pour qu'elle corresponde au type de données corr_id
.sélectionnez CORR_ID dans TABLE1 où CORR_ID n'est pas présent (sélectionnez la distribution (id en tant que varchar) dans TABLE2)