Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Optimizar consulta

Estas en el tema de Optimizar consulta en el foro de SQL Server en Foros del Web. como puedo optimizar esta consulta... O bien cual es la forma correcta de hacerla. SELECT prefijo, LEFT(poblacion,CHARINDEX(',',poblacion)-1) as pob, substring(poblacion, charindex(',',poblacion)+1,len(poblacion)) as Pais FROM [Base].[dbo].[exportado] ...
  #1 (permalink)  
Antiguo 11/12/2007, 19:03
 
Fecha de Ingreso: julio-2004
Mensajes: 104
Antigüedad: 20 años, 5 meses
Puntos: 0
Pregunta Optimizar consulta

como puedo optimizar esta consulta... O bien cual es la forma correcta de hacerla.

SELECT prefijo, LEFT(poblacion,CHARINDEX(',',poblacion)-1) as pob, substring(poblacion, charindex(',',poblacion)+1,len(poblacion)) as Pais
FROM [Base].[dbo].[exportado]

Lo que hace es separar los datos de un campo (registro) en 2 campos
la poblacion esta:
"Sevilla, España"
y se supone que la debe extraer en 2 campos asi:
Pob="Sevilla"
Pais="España"

Si ejecuto las consultas por separado...
el Pob en un select
y el Pais en otro select si me arroja el resultado..
Pero si intento como arriba... me arroja un error.
"Msg 536, Level 16, State 3, Line 1
Invalid length parameter passed to the substring function."

__________________
Podria no estar de acuerdo con lo que dices....., pero daria mi vida por el derecho que tienes de decirlo.
  #2 (permalink)  
Antiguo 11/12/2007, 19:20
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Re: Optimizar consulta

GabrielDR

Estoy ejecutando tu script

DECLARE @POBLACION VARCHAR(100)
SET @POBLACION = 'Sevilla, España'
SELECT LEFT(@POBLACION,CHARINDEX(',',@POBLACION)-1) as pob , substring(@POBLACION, charindex(',',@POBLACION)+1,len(@POBLACION)) as Pais

Y el resutado es:

pob Pais
Sevilla España

(1 row(s) affected)
  #3 (permalink)  
Antiguo 12/12/2007, 06:49
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 24 años, 2 meses
Puntos: 3
Re: Optimizar consulta

Hola tiene razón iislas, la consulta está ok, el error indica que tienes algunos registros sin la "," de manera que se cae en el left y el substring, ya que no le puedes pasar un valor 0 a estas funciones (que es lo que retornaría el charindex si no encuentra la ",")

Tienes dos posibilidades, modificar tus datos para que no existan registros sin "," o validar que cuando el charindex devuelva 0 muestras 'ciudad desconocida' o algo por el estilo

saludos
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
  #4 (permalink)  
Antiguo 12/12/2007, 20:59
 
Fecha de Ingreso: julio-2004
Mensajes: 104
Antigüedad: 20 años, 5 meses
Puntos: 0
Re: Optimizar consulta

Perfecto Gracias... Si efectivamente ahi datos sin ",", ahora la pregunta es como podria validar el charindex() dentro de la misma consulta SQL.
Tendrán algun ejemplo?

Yo hacia consultas usando VFoxPro y podria usar una funcion condicional como IIF(condicion,has esto, sino esto esto) y se ponian en una sola linea select
algo como esto...
SELECT IIF(CHARINDEX(',',@POBLACION)>0,LEFT(@POBLACION,CHARINDEX(',',@POBLACION)-1),"Ciudad Desconocida") as pob , substring(@POBLACION, charindex(',',@POBLACION)+1,len(@POBLACION)) as Pais

Existe algo similar a "IIF" para SQL SERVER?
__________________
Podria no estar de acuerdo con lo que dices....., pero daria mi vida por el derecho que tienes de decirlo.
  #5 (permalink)  
Antiguo 13/12/2007, 06:26
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 24 años, 2 meses
Puntos: 3
Re: Optimizar consulta

Si existe, se puede hacer con "case"

SELECT case when CHARINDEX(',',@POBLACION)>0 then LEFT(@POBLACION,CHARINDEX(',',@POBLACION)-1) else "Ciudad Desconocida" end as pob .. etc,

saludos
__________________
|||| ))>_<(( ||||
www.webmagic.cl <-- esta pagina está mala, no la busquen
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:35.