Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

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
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
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
  #2  
Antiguo 24-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
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
  #3  
Antiguo 24-04-2018
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
La verdad es que no se entiende bien lo que pretendes, por eso te preguntaba antes:
Cita:
Empezado por casimiro notevi
¿exactamente qué quieres conseguir?
Responder Con Cita
  #4  
Antiguo 25-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
La verdad es que no se entiende bien lo que pretendes, por eso te preguntaba antes:
Perdón por no haber contestado antes. Busco todas aquellas localidades que por error u omisión tengan mal puesto el código postal. En España estos van desde el 01xxx al 52xxx; eso lo que busco. Como las dos primeras posiciones coinciden con el código provincial, bsuco códigos postales que no coincidan con ese patrón.
Responder Con Cita
  #5  
Antiguo 25-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Vale. Acabo de hacer sendas pruebas con los códigos propuestos por bucanero y duilioisola y, aparentemente, ambos funcionan correctamente. Muchísimas gracias a todos por vuestra ayuda. Ya sé que soy un pelín paliza.
Responder Con Cita
  #6  
Antiguo 25-04-2018
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
Perdón por no haber contestado antes. Busco todas aquellas localidades que por error u omisión tengan mal puesto el código postal. En España estos van desde el 01xxx al 52xxx; eso lo que busco. Como las dos primeras posiciones coinciden con el código provincial, bsuco códigos postales que no coincidan con ese patrón.
Entonces, ¿el código de provincia debe ser siempre igual a los 2 primeros dígitos del código postal?
Responder Con Cita
  #7  
Antiguo 25-04-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Entonces, ¿el código de provincia debe ser siempre igual a los 2 primeros dígitos del código postal?
En España sí. Las dos primeras posiciones del código postal indican la provincia por orden alfabético: 28 es Madrid, 33 Asturias (por Oviedo), 45 Toledo, etc.
Responder Con Cita
  #8  
Antiguo 25-04-2018
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por Angel.Matilla Ver Mensaje
En España sí. Las dos primeras posiciones del código postal indican la provincia por orden alfabético: 28 es Madrid, 33 Asturias (por Oviedo), 45 Toledo, etc.
Bien, aunque me refería a tus tablas provincia y poblacion.
Tienes en la tabla poblacion los campos codprv y cpostal, que se suponen que son el código de la provincia (enlaza con campo codigo en tabla provincia) y tienes el campo cpostal, entonces en la tabla poblacion, todos los cpostal deberán iniciar con los mismos valores que codprv, ¿es así?

Es que entonces puedes buscar diferencias entre esos campos, algo más o menos así:
Código SQL [-]
SELECT codprv, cpostal
FROM POBLACION
where ('0'||substring(cpostal from 1 for 2)) <> ('0'||substring(codprv from 1 for 2))

Código:
CODPRV CPOSTAL
13     00000
13     43518
13     15177
13     44155
13     36330
Responder Con Cita
  #9  
Antiguo 25-04-2018
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 13
bucanero Va camino a la fama
Hola a todos,


Cita:
Empezado por Angel.Matilla Ver Mensaje
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).
prueba con:
Código PHP:
SELECT CODIGONOMBRECPOSTAL
FROM POBLACION
WHERE SUBSTRING
(CPOSTAL FROM 1 FOR 2NOT IN (SELECT LPAD(CAST(CODIGO AS VARCHAR(2)), 2'0'FROM PROVINCIA WHERE CODIGO AND CODIGO 99ORDER BY CPOSTALNOMBRECODIGO 
Eso esta pasando por que al convertir un código de provincia de un solo dígito, ejemplo Barcelona si utilizas los dos primeros dígitos del código postal correspondería a '08' y el código numérico se queda solo como 8, al aplicar solamente CAST(CODIGO AS VARCHAR(2)) obtienes '8' que no es igual a '08' con el LPAD se soluciona

Un saludo
Responder Con Cita
  #10  
Antiguo 25-04-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.806
Poder: 22
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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
  1. Primero obtenes los dos primeros dígitos del código postal. Eso lo obtienes mediante SUBSTRING.
  2. Luego le agregas un '0' delante, mediante la concatencacion.
  3. 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 [-]
/* CAST('0'  + primeros dos dígitos del código postal AS INTEGER) */

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
Responder Con Cita
  #11  
Antiguo 25-04-2018
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is online now
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cita:
Empezado por duilioisola Ver Mensaje
Debes concatenar el 0 al resultado del substring y no antes:
Pequeño detalle, gran solución
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 23:44:07.


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