PDA

Ver la Versión Completa : Hacer selección en una tabla


verodelphi
13-02-2007, 11:25:25
Hola a todos.

Tengo un problema. Necesito hacer una selección de una tabla por un campo que es de tipo String.

La cuestión está en que el campo es el CIF/DNI. Y resulta que en mi base de datos hay muchos cif erróneos. Algunos pone 0, otros un punto, y otros las iniciales del titular de ese nif. Entonces, lo que quiero es sacar todos aquellos nif erróneos para depurar la tabla y actualizarla con los datos correctos. Las selecciones en las que el nif es un punto o cero no hay problema. El problema está en aquellos nif con caracteres. Pero no sé hacer la selección que me permita obtener aquellos nifs que empiezen por dos caracteres (esto es así porque los cif de las empresas empiezan con una letra). Entonces para que me seleccione los que son varios caracteres no sé.

Si alguien me pudiera orientar un poco lo agradecería.

Un saludo

Bicho
13-02-2007, 12:38:34
Hola,

Pero no sé hacer la selección que me permita obtener aquellos nifs que empiezen por dos caracteres (esto es así porque los cif de las empresas empiezan con una letra). Entonces para que me seleccione los que son varios caracteres no sé.

Entonces si la primera letra puede ser un carácter, no nos interesa ya que es válido. El que no es válido es un carácter en la posición 2.
Puedes usar la función substr de oracle para coger el segundo carácter, pero no veo una posible comparación del caracter para validar si es numérico o no.
Así, no se si se puede hacer mejor, pero así me ha funciona en una prueba que acabo de hacer:

select ... from ...
where substr(dni, 2, 1) in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')

Espero te sirva.

Saludos

verodelphi
14-02-2007, 09:27:27
Muchas gracias por responder. La verdad es que me ha servido. No estoy muy puesta en Oracle y debe haber muchas funciones con las que conseguir otras selecciones que todavía tengo que conocer.

Esto de los foros está genial, porque siempre hay alguien que te echa una mano.

Gracias de verdad.