Optimizar base de datos de etecsa para usar con Sijambo

Bases de datos...

Moderadores: frank, dxfiles

Responder
Avatar de Usuario
Sam
Mensajes: 78
Registrado: Lun, 19 Ago 2013, 14:43
Ubicación: /dev/random

Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por Sam » Lun, 03 Nov 2014, 13:51

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 :D 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

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por hugo » Lun, 03 Nov 2014, 16:31

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

Avatar de Usuario
Sam
Mensajes: 78
Registrado: Lun, 19 Ago 2013, 14:43
Ubicación: /dev/random

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por Sam » Lun, 03 Nov 2014, 16:45

"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?

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por hugo » Lun, 03 Nov 2014, 17:49

Solo necesitas la función apropiada. Según la documentación oficial de SQLite, algo como esto probablemente produzca el resultado que deseas:

Código: Seleccionar todo

select substr(campo1, 3) as campo1, campo2 from tabla
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.
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

Avatar de Usuario
ozkar
Mensajes: 176
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: /home/ozkar/public_html/

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por ozkar » Mar, 04 Nov 2014, 08:40

@Sam: Instálate Sqliteman del repo, abre una ventana de consultas y:

Código: Seleccionar todo

SELECT REPLACE ("5354093356","53" ,"");
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:

Código: Seleccionar todo

SELECT SUBSTR ("5354093356",3);
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, :lol:
Linux Registered User #530387
Fedora 24 User.
Plasma 5 User.

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por hugo » Mar, 04 Nov 2014, 12:41

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%"
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

Avatar de Usuario
Sam
Mensajes: 78
Registrado: Lun, 19 Ago 2013, 14:43
Ubicación: /dev/random

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por Sam » Mar, 04 Nov 2014, 13:39

@Hugo, esto que me dices serviría si tuviera el código fuente de Sijambo (y supiera qué hacer exactamente con el :lol: )

Código: Seleccionar todo

select substr(campo1, 3) as campo1, campo2 from tabla
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í:

Código: Seleccionar todo

UPDATE main.movil SET number=SUBSTR(number, 3);
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 :shock: , en el campo 'province' no hay nadie que no tenga un '7'.

Gracias Hugo y Ozkar, creo que podemos dar este tema por cerrado.

Avatar de Usuario
hugo
Mensajes: 1430
Registrado: Sab, 07 Ago 2010, 14:09
Ubicación: La Habana
Contactar:

Re: Optimizar base de datos de etecsa para usar con Sijambo

Mensaje por hugo » Mar, 04 Nov 2014, 13:50

Por cierto, creo que cometi una pifia de paréntesis, realmente la condición debería ser así:

Código: Seleccionar todo

WHERE (LENGTH(number) > 8) AND (number LIKE "53%")
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
Lo único que necesita el mal para triunfar es que los hombres buenos no hagan nada.
- Edmund Burke

Responder