Optimizar base de datos de etecsa para usar con Sijambo
Optimizar base de datos de etecsa para usar con Sijambo
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
Gracias de antemano
Saludos
Re: Optimizar base de datos de etecsa para usar con Sijambo
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.
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke
- Edmund Burke
Re: Optimizar base de datos de etecsa para usar con Sijambo
"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
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.
Código: Seleccionar todo
select substr(campo1, 3) as campo1, campo2 from tabla
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke
- Edmund Burke
Re: Optimizar base de datos de etecsa para usar con Sijambo
@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:
Y por gracioso eché a perder mi DB de ETECSA,
Código: Seleccionar todo
SELECT REPLACE ("5354093356","53" ,"");
Código: Seleccionar todo
SELECT SUBSTR ("5354093356",3);
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE number LIKE '53';
Linux Registered User #530387
Fedora 24 User.
Plasma 5 User.
Fedora 24 User.
Plasma 5 User.
Re: Optimizar base de datos de etecsa para usar con Sijambo
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:
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%"
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke
- Edmund Burke
Re: Optimizar base de datos de etecsa para usar con Sijambo
@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: 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: 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.
Código: Seleccionar todo
select substr(campo1, 3) as campo1, campo2 from tabla
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE LENGTH(number > 8) AND number LIKE "53%"
@Ozkar, con eso que me diste me sirvió hasta aquí:
Código: Seleccionar todo
UPDATE main.movil SET number=SUBSTR(number, 3);
Código: Seleccionar todo
UPDATE "main"."movil" SET number=SUBSTR(number, 3) WHERE number LIKE '53';
Gracias Hugo y Ozkar, creo que podemos dar este tema por cerrado.
Re: Optimizar base de datos de etecsa para usar con Sijambo
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
WHERE (LENGTH(number) > 8) AND (number LIKE "53%")
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
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke
- Edmund Burke