Array
(
)

selecionar somente registros com numeros

Eduardo.padilha
   - 10 mar 2005

Ola Galera.

Alguém saberia me dizer se tem como atraves
de um select retornar os registros q em um determinado
campo só tenha numeros.

Exemplo:

select campo from tabela

resultado :

1 - 00068744
2 - 00068744B
3 - 00069745
3 - 03888569745

Ou seja se tiver caracter string nao me retorne no select
retornaria somente.

1 - 00068744
3 - 00069745
3 - 03888569745

Se alguém souber .

Valeu.

Emerson
   - 10 mar 2005

tente assim:

select campo from tabela
where isnumeric(campo)=1

demora um pouco, mas acho que resolve...

Eduardo.padilha
   - 10 mar 2005

Meu caro amigo emerson.en

Funcionou.....

Mas uma coisa teria como checar na mesma
Tabela os registros q tem caracter e o outro q nao tem ?
retornar via select ?

Ex:
1 - 00068744
2 - 00068744B
3 - 6402A
4 - 6402

E deletar somente os q tem Letras no caso do exemplo o registro 2 e 3. ?

Obrigado .

Emerson
   - 10 mar 2005

creio que já foi mostrado:

select campo from tabela
where isnumeric(campo)=1 // são numéricos

select campo from tabela
where isnumeric(campo)=0 // não são numéricos

delete from tabela
where isnumeric(campo)=0 // não são numéricos

Eduardo.padilha
   - 10 mar 2005

Eu entendi..... 1 numericos e 0 nao numericos.

O meu problema eh q preciso checar se o registro existe.
ou seja se ele existe numerico e nao numerico . Veja o registro
5 e o 9 esse nao poderia ser deletado pq o mesmo nao existe ´o nao numerico´
para ele, ou seja preciso fazer uma comparacao entre os registros.
Como se fosse registros duplicados.

Ex:
1 - 00068744
2 - 00068744B
3 - 6402A
4 - 6402
5 - 66445
6 - 88774F
7 - 88774
8 - 999A
9 - 9997

Emerson
   - 10 mar 2005

agora entendi...

só uma pergunta: a letra seria sempre o último caractere?

Eduardo.padilha
   - 10 mar 2005

sim, mas pode ser letra ou / ou .

Emerson
   - 10 mar 2005

tente isso:
#Código

select campo 
from tabela
where not campo in
  (select substring(campo,1,len(campo)-1) 
   from tabela 
   where isnumeric(campo)=0)


assim só seriam retornados os registros que NÃO tem o correspondente alfanumérico.

Eduardo.padilha
   - 11 mar 2005

Emerson ?

Para q seria o parametro -1 ?

Se eu o deixar aparece o seguinte erro:

´Invalid length parameter passed to the substring function.´

Emerson
   - 11 mar 2005

é o seguinte: aquela subselect irá retornar todos os códigos que têm a letra, mas sem a letra.
ele irá buscar por 00889A, mas irá retornar apenas o 00889.
a função substring() é a responsável por esse retorno, onde ela irá buscar a string, da posição 1 até o tamanho da string - 1.

exemplificando:
supondo que a string seja 00889A, sabemos que ela tem tamanho 6. mas eu preciso retirar apenas os cinco primeiros, por isso o len()-1, que faz exatamente isso: conta quantos caracteres há na string e retorna essa quantidade subtraindo 1.

ilustrando:
substring(string,1,len(string)-1) ->
substring(´00889A´,1,len(´00889A´)-1) ->
substring(´00889A´,1,6-1) ->
substring(´00889A´,1,5) = ´00889´

talvez o erro tenha acontecido por ter algum valor com apenas 1 caractere. tente alterar a instrução para:
#Código

select campo 
from tabela 
where not campo in 
  (select substring(campo,1,len(campo)-1) 
   from tabela 
   where len(campo)>1 and isnumeric(campo)=0)


Eduardo.padilha
   - 11 mar 2005

Entendi a Lógica e aliás muito bem montada.

Mas acho q eh um pouquinho mas complexo, tenho certeza q vc me ajudará.

O erro continua.
´Invalid length parameter passed to the substring function.´

Detalhe em alguns registros tenho o conteudo q eh somente caracter ou numerico de 1.

Entao o q eu precisaria .

Registro 1 e 2 (Existe numerico e caracter ? sim) R: Excluir.
Registro 3 - Nao fazer nada pq nao existe um igual para ele com caracter.
Registro 4 - Nao fazer nada pq nao existe um igual para ele. Ex 7CA
Registro 5 - Nao fazer nada pq nao existe um igual para ele com caracter.
Registro 6 - Nao fazer nada
Registro 7 e 8 (Existe numerico e caracter Excluir.
Registro 9 e 10 (Existe numerico e caracter Excluir.

Exemplo:

1 - 855548A
2 - 855548
3 - 7
4 - CA
5 - 7741
6 - Informar
7 - 88744
8 - 88744G
9 - 65
10- 65K

Select num_nota_fiscal
from Fanftit0
where not num_nota_fiscal in
(select substring(num_nota_fiscal,1,len(num_nota_fiscal)-1)
from Fanftit0
where len(num_nota_fiscal)>1 and isnumeric(num_nota_fiscal)=0)

Emerson
   - 11 mar 2005

exibe todos
#Código

Select num_nota_fiscal
from Fanftit0


exibe os registros que devem ser mantidos:
#Código
Select num_nota_fiscal 
from Fanftit0 
where not num_nota_fiscal in 
  (select substring(num_nota_fiscal,1,len(num_nota_fiscal)-1) 
   from Fanftit0 
   where len(num_nota_fiscal)>1 and isnumeric(num_nota_fiscal)=0)


exibe os registros que devem ser excluídos:
#Código
Select num_nota_fiscal 
from Fanftit0 
where num_nota_fiscal in 
  (select substring(num_nota_fiscal,1,len(num_nota_fiscal)-1) 
   from Fanftit0 
   where len(num_nota_fiscal)>1 and isnumeric(num_nota_fiscal)=0)


Eduardo.padilha
   - 11 mar 2005

Legal....

Testei agora esta certinho....

Muito Obrigado.

Valeu.