Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Error en una condición con CAST

Tengo una base de datos en FB 2.5. Dos de las tablas son: provincias, que únicamente contiene dos valores (Codigo SMALLINT y Nombre VARCHAR), y poblaciones que tiene, entre otros campos, el nombre y el código postal, ambos VARCHAR. En la tabla de provincias tengo declarada una fila con el código 99 y el nombre PROVINCIA DESCONOCIDA.

Estoy tratando de sacar las poblaciones con este query:
Código PHP:
SELECT CodigoNombreCpostal
  FROM Poblacion 
 WHERE CAST
(SUBSTRING(Cpostal FROM 1 FOR 2) AS INTEGERNOT IN (SELECT Codigo FROM Provincias WHERE Codigo <> 99)
 
ORDER BY NombreCpostalCodigo 
Sin embargo al ejecutar el query me da este error:
Cita:
Conversion error from string ""
¿Qué estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 24-04-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Está un poco confuso, ¿exactamente qué quieres conseguir?
Responder Con Cita
  #3  
Antiguo 24-04-2018
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero, vamos, que el problema es que hay un cpostal en blanco:
Código:
13    14828    CINCO CASAS        ES
Como ejemplo

Última edición por Casimiro Notevi fecha: 24-04-2018 a las 13:46:31.
Responder Con Cita
  #4  
Antiguo 24-04-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Como dice Casimiro, tienes un código postal en blanco.

Prueba concantenando '0' antes del código postal para que por lo menos tenga un 0.
Obviamente fallará si tienes letras en ese campo.

Código SQL [-]
SELECT CODIGO, NOMBRE, CPOSTAL
FROM POBLACION
WHERE
CAST(SUBSTRING('0' || CPOSTAL FROM 1 FOR 2) AS INTEGER) NOT IN (SELECT CODIGO
                                                                FROM PROVINCIAS
                                                                WHERE
                                                                CODIGO <> 99)
ORDER BY NOMBRE, CPOSTAL, CODIGO
Responder Con Cita
  #5  
Antiguo 24-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Gracias por vuestras ideas.

Sobre lo del código postal en blanco: Vale. El ejemplo que ha puesto Casimiro es real: En esa tabla está ese municipio sin código postal, pero imagina que la carga desde un fichero externo TXT pone, por error, código postales que empiezan por 75 en lugar de 45. Para eso me hace falta ese query.
Cita:
Empezado por duilioisola Ver Mensaje
Prueba concantenando '0' antes del código postal para que por lo menos tenga un 0.
Obviamente fallará si tienes letras en ese campo.
Acabo de probarlo. No funciona; probando sobre la tabla que tengo me sale, por ejemplo, esto:
Cita:
SELECT CODIGO, NOMBRE, CPOSTAL FROM POBLACION
WHERE CAST(SUBSTRING('0' || CPOSTAL FROM 1 FOR 2) AS INTEGER) NOT IN (SELECT CODIGO
FROM PROVINCIA WHERE CODIGO < 99) ORDER BY NOMBRE, CPOSTAL, CODIGO

Codigo Nombre Cpostal
18 ABADIA LA MENA 09586
26 ABAJAS DE BUREBA 09141
...
Lo que me descuadra del todo es que poniendo ese cero no dé error y sin ponerlo, al menos a mi, sí me lo dé.
Responder Con Cita
  #6  
Antiguo 24-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Prueba concantenando '0' antes del código postal para que por lo menos tenga un 0.
Obviamente fallará si tienes letras en ese campo.
De todas formas hay algo en tu query que no me cuadra. Haciendo una prueba a lo bruto:
Código PHP:
SELECT CODIGONOMBRECPOSTALCAST(SUBSTRING('0' || CPOSTAL FROM 1 FOR 2) AS INTEGERFROM POBLACION
WHERE CAST
(SUBSTRING('0' || CPOSTAL FROM 1 FOR 2) AS INTEGERNOT IN (SELECT CODIGO
FROM PROVINCIA WHERE CODIGO 
AND CODIGO 99ORDER BY CPOSTALNOMBRECODIGO 
Me sale, entre otras cosas, esto:
Cita:
Código Nombre
14828 CINCO CASAS Cpostal CAST
57931 VITORIA-GASTEIZ 01000 0
14221 CENTRO MILITAR ARACA/ARAKA 01100 0
...
Algo no me cuadra. Parece que convierte sólo el 0 de la izquierda y obvia los dos caracteres del campo de la tabla. De funcionar bien tendría que aparece en ambos un 1 en vez de ese 0. Eso sí: Todos los los códigos postales iguales o superiores a 10 ni los ha tocado.

Responder Con Cita
  #7  
Antiguo 24-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Otra cosa, y perdón por el barullo de mensajes: Me valdría peferctamente al revés:
Código PHP:
SELECT CODIGONOMBRECPOSTAL
FROM POBLACION
WHERE SUBSTRING
(CPOSTAL FROM 1 FOR 2NOT IN (SELECT CAST(CODIGO AS VARCHAR(2))
FROM PROVINCIA WHERE CODIGO AND CODIGO 99ORDER BY CPOSTALNOMBRECODIGO 
Pero este query me saca todos los registros de la tabla (más de 58.000).
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
'Cast' basado en un arreglo. TiammatMX OOP 9 09-08-2013 12:46:05
Error: Valor de carácter no valido para especificacion cast'. Tauro78 MS SQL Server 3 20-03-2009 20:00:56
Sysdate y Cast MYSQL elisa44 SQL 0 04-07-2006 02:15:14
Consulta Cast marceloalegre SQL 4 10-06-2005 17:30:46
Cast a un Blob Triton Firebird e Interbase 0 20-02-2004 09:49:53


La franja horaria es GMT +2. Ahora son las 19:00:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi