portable - sqlite website
SQLite, comprueba si el campo TEXTO tiene caracteres alfabéticos en él (1)
Puede usar GLOB
en SQLite con un rango para seleccionarlos:
SELECT *
FROM MY_TABLE
WHERE num GLOB ''*[A-Za-z]*''
Véalo en uso con este violín: http://sqlfiddle.com/#!7/4bc21/10
Por ejemplo, para estos registros:
num
----------
1234567890
0987654321
1000000000
1000A00000
1000B00000
1000c00000
GLOB ''*[A-Za-z]*''
devolverá estos tres:
num
----------
1000A00000
1000B00000
1000c00000
A continuación, puede traducir eso al DELETE
apropiado:
DELETE
FROM MY_TABLE
WHERE num GLOB ''*[A-Za-z]*''
De acuerdo, tengo una gran lista de entradas y en una de las columnas (por simplicidad, vamos a llamarlo num, hay un número, algo así como 123456780000
(todos tienen la misma longitud y formato), pero a veces hay campos que se ven como algo Me gusta esto
12345678E000
or
12345678H000
Ahora, necesito eliminar todas las filas en las que la columna num no es completamente numérica. El tipo de num es TEXTO , no INTEGER . Por lo tanto, los ejemplos anteriores deben eliminarse, mientras que 123456780000
no deberían.
He intentado con dos soluciones, una de las cuales funciona pero es poco elegante y desordenada, y la otra no funciona en absoluto.
Lo primero que intenté fue
DELETE FROM MY_TABLE WHERE abs(num) == 0.0
Debido a que de acuerdo con la documentación, abs (X) devuelve exactamente 0.0 si se da un valor de TEXTO y no se puede transmitir a un número real. Así que pensé que debería dejar pasar todos los "números solo" y eliminar los que tienen un personaje. Pero no hace nada, no elimina ni una sola fila.
Lo siguiente que probé es
DELETE FROM MY_TABLE WHERE num LIKE "%A%" OR "%B%" OR "%C%"
Lo cual parece funcionar, pero la base de datos es grande y no estoy seguro de qué caracteres pueden aparecer, y mientras solo podía hacer "%D%" OR "%E%" OR "%F%" OR ...
con todo alfabeto, esto se siente poco elegante y desordenado. Y realmente quiero aprender algo sobre el lenguaje SQLite.
Mi pregunta, finalmente, es: ¿cómo puedo resolver este problema de una manera agradable y simple? Quizás hay algo que estoy haciendo mal con la solución de abs (X) , o hay otra manera que yo no sepa / piense?
Gracias por adelantado.
EDITAR: Según un comentario probé SELECT abs(num) FROM MY_TABLE WHERE num like ''%A%''
y devolvió el siguiente
12345678.0
Eso es extraño. Parece que ha dividido el número donde apareció el orden alfabético. La documentación afirmaba que devolvería 0.0 si no podía convertirla en un número. Hmm ...