Ir para conteúdo
Fórum Script Brasil
  • 0

Dados que Precisam ser Consultados


kethellen

Pergunta

Olá pessoal alguém poderia me ajudar me dizendo qual o codigo SQL que posso fazer uma consulta tipo.

Eu tenho uma coluna ISBN onde tem muitos dados, ou seja, milhões de informações onde não tem como eu saber se todos estão num único formato.

Então preciso de um código SQL de consulta para identificar isso.

Exemplo:

ISBN

12-125-256

12.356.963

58696333

Desde já agradeço que puder ajudar.

Editado por kethellen
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
Oi 'kethellen'

O manual do Mysql na versão 4.1 capítulo 6 tem todas as funções necessárias para executar o que você deseja.

Ok Denis é que tava precisando meio urgente por isso não li o manual, sei que tem muita gente experiente e que num instante poderia me informar o código, por isso postei, você sabe marinheiro de primeira viagem é assim mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

O exemplo é para o SQL Sever mas se não me engano o MySQL tb tem

declare @tab table (cod varchar(10))
insert into @tab (cod) values ('12-125-256')
insert into @tab (cod) values ('12.356.963')
insert into @tab (cod) values ('58696333')
insert into @tab (cod) values ('586.963.33')

select * from @tab
where charindex('-', cod) > 0
or charindex('.', cod) > 0
or charindex(';', cod) > 0

Link para o comentário
Compartilhar em outros sites

  • 0

Veja o código.

SELECT IF(LOCATE('-',ISBN)<>0, REPLACE(ISBN, '-', ''), IF(LOCATE('.', ISBN)<>0, REPLACE(ISBN, '.', ''), ISBN) AS ISBN FROM minhatabela

REPLACE(str,da_str,para_str)

Retorna a string str com todas ocorrências da string da_str substituida pela string para_

str:

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');

-> 'WwWwWw.mysql.com'

Como falei bastava consultar o manual.

Link para o comentário
Compartilhar em outros sites

  • 0

Denis,

Testei o seu código e o mesmo faz com que todos os códigos ISBN fiquem num formato único na consulta, os mesmos ficaram sem hífen e sem o ponto.

Mas Denis, acho que talvez eu tenha me expressado mau e você não entendeu direito o que eu queria realmente, testei seu codigo, o que eu quiz dizer foi simplesmente se teria como através de um código SQL mostrar aqueles dados que estão fora de um padrão. Um esta com ponto outro com hifen e outro sem hifen e sem ponto, ou seja, eu queria um codigo sql que não fosse o SELECT ISBN FROM LIVRO; pois imagine se tenho muitos e muitos dados para visualizar que tem dois ou três que estão diferentes dos outros é complicado.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi kethellen

Veja só... o que o Denis pode estar tentando dizer é que você precisa

ampliar os seus horizontes... muitos problemas podem ser resolvidos

até se você raciocinar com uma lógica fora da programação, da

informática...

Veja mais: considerando esta lista de publicações:

nome                                     numero
   CARTÃO DE REFERENCIA MBASIC              85-216-0456-4
   CARTÃO DE REFERENCIA TURBO BASIC         85-216-0567-6
   WINDOWS ASSEMBLY LANGUAGE AND..        . 0-87930-474-X
   PADROES DE PROJETO............        .. 85-7307-610-0
   CONSTRUINDO O FUTURO ATRAVES DA EDUCACAO 85-221-0331-3
Como pode ver acima, o código ISBN não tem um padrão (os códigos acima correspondem exatamente ao impresso nas respectivas publicações) Agora se você tem muitas informações erradas, já que em algum momento foi possível cadastrar códigos errados (veja a lista a seguir), o que pode ser feito?
nome                                     numero
   CARTÃO DE REFERENCIA MBASIC              8.521-604,56.4
   CARTÃO DE REFERENCIA TURBO BASIC         85 21/605-67.6
   WINDOWS ASSEMBLY LANGUAGE AND SYSTEMS    0-87, 930-474-X
   PADROES DE PROJETO............        .. 85-73 07-610-0
   CONSTRUINDO O FUTURO ATRAVES DA EDUCACAO 8.5-2|21-03.31-3
Imagine se você não tivesse computador, não existisse SQL... o que você faria para "datilografar" a lista acima? depois disso, vamos para a informática... Medidas a serem adotadas: a) impedir que sejam cadastrados novos dados com caracteres inválidos e isso você pode fazer, por exemplo, usando javascript, php ou de outra forma, dependendo de como as tabelas são alimentadas: isto já a solução para você, que terá, então, que pesquisar, aprender como implementar e pode fazer isso procurando aqui mesmo dentre as centenas de códigos e scripts disponíveis... B) identificar os códigos que contém caracteres inválidos, ou seja, caracteres que não sejam 0-9, X e - Nisso, posso colaborar com estes exemplos; exemplo, caso o campo com o número ISBN tivesse apenas 5 caracteres - varchar(5)... entenda a lógica e desenvolva o resto... c) identificados os códigos, faça a correçao... use a solução da letra (B)... Esta query lista o nome e número das publicações com ISBN contendo caracteres inválidos.
select nome, numero as numero_atual,
       concat(if(substring(numero, 1, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"),
                 substring(numero, 1, 1),
                 "-"),
              if(substring(numero, 2, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"),
                 substring(numero, 2, 1),
                 "-"),
              if(substring(numero, 3, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"),
                 substring(numero, 3, 1),
                 "-"),
              if(substring(numero, 4, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"),
                 substring(numero, 4, 1),
                 "-"),
              if(substring(numero, 5, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"),
                 substring(numero, 5, 1),
                 "-")
             ) as numero_novo
from `acme`.`publicacoes`
where
  not(
          (substring(numero, 1, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"))
      and (substring(numero, 2, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"))
      and (substring(numero, 3, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"))
      and (substring(numero, 4, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"))
      and (substring(numero, 5, 1) in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "-"))
     )

Ok? então, mãos-à-obra!

Link para o comentário
Compartilhar em outros sites

  • 0

Paulobergo eu entendi o que você e o Denis quizeram me passar que podem ter dados fora do padrão e para isso existem esses códigos que você me passaram para que sejam transformados e apresentados na consulta num só padrão.

E isso eu sabia e entendi o que você me explicaram, mais eu acredito que me expressei mau em alguns momentos, o que realmente eu queria era só um codigo que mostrasse esses dados em minha base pra eu saber que eles estão fora do padrão tipo um SELECT ISBN FROM LIVRO; só que eu queria saber se existia um código um pouco mais especifico que apresentasse esses dados, pois o SELECT ISBN FROM LIVRO apresenta todos, mais dai se tiver muito e muitos dados não teria como eu descobrir no meio de tantos que dois ISBN estão usando um ponto e outro não esta usando nada. Entendeu?

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'kethellen'

Eu te dei um exemplo e você nem pensou em como usá-lo.

Abaixo tem uma variação do exemplo que vai exibir o que você deseja.

SELECT * FROM minhatabela WHERE LOCATE('-',ISBN)<>0 AND LOCATE('.', ISBN)<>0

Vai listar apenas os registros sujos conforme o exemplo que você mostrou no post#1.

Link para o comentário
Compartilhar em outros sites

  • 0

você chegou a ver este exemplo?

O exemplo é para o SQL Sever mas se não me engano o MySQL tb tem

declare @tab table (cod varchar(10))
insert into @tab (cod) values ('12-125-256')
insert into @tab (cod) values ('12.356.963')
insert into @tab (cod) values ('58696333')
insert into @tab (cod) values ('586.963.33')

select * from @tab
where charindex('-', cod) > 0
or charindex('.', cod) > 0
or charindex(';', cod) > 0

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...