Página 1 de 1
Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Lun, 03 Nov 2014, 13:51
por Sam
Hola GUTL, recientemente probé Sijambo en mi dispositivo y me gustó más que EtecsaDroyd, pero no muestra el nombre de la persona que llama poque en la DB todos los números de móviles comienzan con (53) que es el código del país, y Sijambo al número que llama le "quita" el 53 delante para comparar con la DB. Lo que necesito es un comando
para eliminar los dos primeros dígitos de todos los valores en el campo "number" de la base de datos SQLite de ETECSA.
Gracias de antemano
Saludos
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Lun, 03 Nov 2014, 16:31
por hugo
Una forma de hacerlo: crear una vista con una consulta donde obtengas los digitos que deseas del campo de número, y los demas campos tal cual, luego crear una nueva tabla con la misma estructura que la que estas consultando e insertar los registros desde la vista. Finalmente eliminar la tabla original y renombrar la nueva.
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Lun, 03 Nov 2014, 16:45
por Sam
"Entiendo" lo que me dices, pero ni idea de cómo se hace. No tengo idea de como se trabaja con DBs SQLite, solo he trabajado con MySQL. Hay algún programa/comando que me permita hacer eso sin rodeos?
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Lun, 03 Nov 2014, 17:49
por hugo
Solo necesitas la función apropiada. Según
la documentación oficial de SQLite, algo como esto probablemente produzca el resultado que deseas:
En lenguaje corriente: obtener del primer campo de la tabla la subcadena de caracteres del tercero al ultimo, y además el segundo campo de la tabla íntegro.
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Mar, 04 Nov 2014, 08:40
por ozkar
@Sam: Instálate Sqliteman del repo, abre una ventana de consultas y:
Con eso eliminamos el 53, pero si hay ocurrencias del 53 en otra parte de la cadena, nos freimos, así que una vía más eficiente sería:
Con esto si resolvemos el problema, ahora hacemos la consulta:
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE number LIKE '53';
Y por gracioso eché a perder mi DB de ETECSA,
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Mar, 04 Nov 2014, 12:41
por hugo
Por eso yo recomendaba hacer una copia de la tabla Ozkar, jeje.
De todas formas si se utiliza directamente
UPDATE con
LIKE como recomienda Ozkar, probablemente sea mas seguro ajustar la condición:
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE LENGTH(number > 8) AND number LIKE "53%"
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Mar, 04 Nov 2014, 13:39
por Sam
@Hugo, esto que me dices serviría si tuviera el código fuente de Sijambo (y supiera qué hacer exactamente con el
)
pero vale, porque ya voy teniendo una idea de cómo emplear
substr para otra cosa que se me ocurre hacer. Ahora voy a probar con:
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE LENGTH(number > 8) AND number LIKE "53%"
esta otra consulta que me pones en otra copia de la DB porque quiero estar seguro de que le "quité" el '53' SOLO a los #s cuya 'LENGTH > 8'.
@Ozkar, con eso que me diste me sirvió hasta aquí:
porque si lo pongo completo:
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE number LIKE '53';
se demora como si estuviera "trabajando" pero deja todo tal cual. Por cierto, en esta DB que tengo tooooo'el mundo es de La Habana
, en el campo 'province' no hay nadie que no tenga un '7'.
Gracias Hugo y Ozkar, creo que podemos dar este tema por cerrado.
Re: Optimizar base de datos de etecsa para usar con Sijambo
Publicado: Mar, 04 Nov 2014, 13:50
por hugo
Por cierto, creo que cometi una pifia de paréntesis, realmente la condición debería ser así:
Nota: en instrucciones LIKE, el porciento viene siendo el equivalente al asterisco.
Edición:
A propósito Sam, en el caso de la tabla de móviles da igual la provincia, porque el prefijo para todos los móviles es 5 (pensándolo bien podría hacerse una sola tabla y agregar los móviles con el código de provincia 5), pero en el caso de la tabla de números fijos si que debe haber una diferencia en la columna de provincia, porque hay números que se repiten pero para provincias diferentes, lo cual puede comprobarse por ejemplo con una consulta como esta:
Código: Seleccionar todo
SELECT * FROM fix INDEXED BY numberF WHERE number IN (SELECT number FROM fix INDEXED BY numberF GROUP BY number HAVING (COUNT(number) > 1)) ORDER BY number, province, name