www portable pagina org oficial sql sqlite3 sql-delete

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 ...