Perdón, el ejemplo que di anteriormente no estaba del todo bien.
Debes concatenar el 0 al resultado del substring y no antes:
Me explico
- Primero obtenes los dos primeros dígitos del código postal. Eso lo obtienes mediante SUBSTRING.
- Luego le agregas un '0' delante, mediante la concatencacion.
- Finalmente conviertes esos tres dígitos ('0' + resultado de SUBSTRING) a integer mediante el CAST.
La idea es que si el SUBSTRING te devuelve "vacío", por lo menos haya un '0' para convertir.
Código SQL
[-]
SELECT CODIGO, NOMBRE, CPOSTAL, CAST('0' || SUBSTRING(CPOSTAL FROM 1 FOR 2) AS INTEGER)
FROM POBLACION
WHERE
CAST('0' || SUBSTRING(CPOSTAL FROM 1 FOR 2) AS INTEGER) NOT IN (SELECT CODIGO
FROM PROVINCIA
WHERE
CODIGO > 0 AND
CODIGO < 99)
ORDER BY CPOSTAL, NOMBRE, CODIGO