SuporteTecnico Postado Junho 20, 2010 Denunciar Share Postado Junho 20, 2010 Estou com um novo desafio e preciso de ajuda.Preciso de uma busca no campo "nome" da tabela, que me retorne somente a primeira letra do último sobrenome.Exemplo:Arthur Bragança de Vasconcellos Weintraub => deve me retornar somente a letra "W"Será que é possível isso? Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 20, 2010 Denunciar Share Postado Junho 20, 2010 é sim. exemplo:<% Dim primeira_letraprimeira_letra = Left(Right(rs("nome"), InStr(StrReverse(rs("nome")), " ")), 1) %>[/code] ou: [code]<% Dim primeira_letraDim xx = Split(rs("nome"), " ")primeira_letra = Left(x(Ubound(x)), 1) %> Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 20, 2010 Autor Denunciar Share Postado Junho 20, 2010 é sim. exemplo:<% Dim primeira_letra primeira_letra = Left(Right(rs("nome"), InStr(StrReverse(rs("nome")), " ")), 1) %> ou: <% Dim primeira_letra Dim x x = Split(rs("nome"), " ") primeira_letra = Left(x(Ubound(x)), 1) %>Não consegui montar a sentença...<%Dim primeira_letraprimeira_letra = Left(Right(rsL("autor"), InStr(StrReverse(rsL("autor")), " ")), 1)%><input name="cutter" type="text" size="15" alt="yes" value="<%response.Write(primeira_letra)%>" readonly="true"/> Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 20, 2010 Denunciar Share Postado Junho 20, 2010 como assim?? Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Junho 21, 2010 Denunciar Share Postado Junho 21, 2010 (editado) Estou com um novo desafio e preciso de ajuda.Preciso de uma busca no campo "nome" da tabela, que me retorne somente a primeira letra do último sobrenome.Exemplo:Arthur Bragança de Vasconcellos Weintraub => deve me retornar somente a letra "W"Será que é possível isso?kara, já passei por problema parecido, e na ocasião, criei uma função. Para atender seu problema, dei uma modificada nela o que não fugiu muito do que o Kuroi lhe indicou.Segue abaixo<% Function RetornaLetra(strNome) arrNome = split( strNome , " " ) RetornaLetra = left(arrNome( ubound( arrNome ) ) , 1 ) End Function response.Write RetornaLetra("Arthur Bragança de Vasconcellos Weintraub") %>Abraço Editado Junho 21, 2010 por Romero Dias Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 21, 2010 Autor Denunciar Share Postado Junho 21, 2010 (editado) Muito bom! Era isso mesmo, só que não para por aí...Tem algo muito mais complexo que eu gostaria de fazer, se alguém já viu a tabela Cutter sabe do que estou falando, ela possui mais 15000 códigos.Bem, vamos ver se consigo passar minha idéia...Na tabela Cutter existe vários dados como estes:cod cod_autor422 Weil423 Wein424 WeinmPreciso que o código sql faça uma busca na Tabela Cutter e faça uma "aproximação" do último sobrenome e retorne o código.Exeplo de nome:Arthur Bragança de Vasconcellos WeintraubComo já conseguimos separar a primeira letra do último sobrenome, ficaria assim a visualização:W423Conto com a ajuda de vocês!Muito obrigado pela a ajuda anterior. Editado Junho 21, 2010 por SuporteTecnico Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Junho 21, 2010 Denunciar Share Postado Junho 21, 2010 Kara, você quer que sua sentença SQL retorne a última linha da tabela? Ou seja, a última linha inserida?Seu banco é SQL Server? Se sim, segue abaixo a sentença.SELECT TOP 1 cod , cod_autor FROM Cutter ORDER BY cod DESCEntão, no script ASP, você recupera as informações que vieram do banco e aplica a função RetornaLetra() no campo cod_autorAbraço Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 21, 2010 Autor Denunciar Share Postado Junho 21, 2010 (editado) O banco de dados é access.Como disse existem mais de 15000 dados, o script vai ter que varrer toda a tabela em busca da palavra mais próxima.Me expressei mal, a busca será feita utilizando o último sobrenome.Exemplo 1:"Antônio Flávio de Oliveira"Tabela Cutter45 Ole46 Oli47 Olip48 Oliv <-- esta aqui pega o numero 4849 Olivi51 Olm52 Olo53 Oly54 Om55 OmeExemplo 2:"Arnaldo Süssekind"Tabela Cutter959 Sup961 Sur962 Surr963 Surv964 Sus <-- esta aqui pega o numero 464965 Sut966 Suth967 Sutt968 Suz969 SviA sequência vai estar em ordem alfabética, também vou separar em duas colunas (numero, cod_nome) mas a posição não tem como saber. Editado Junho 21, 2010 por SuporteTecnico Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 21, 2010 Denunciar Share Postado Junho 21, 2010 não tenho certeza se funciona, mas se entendi o q você quer, acho q você pudia tentar alguma coisa assim:Select * From tabela Where 'Antônio Flávio de Oliveira' Like '%' + Cutter + '%' Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 21, 2010 Autor Denunciar Share Postado Junho 21, 2010 Primeiro obrigado pela força kuroi!Mas não é isso, a busca não pode retornar mais que 1 dado.exemplo:"Antônio Flávio de Oliveira"1° Antes de fazer a busca temos que separar o último sobrenome, neste caso "Oliveira"já sabemos que a variável do exemplo é "Oliveira", ótimo.2° Na base de dados vai estar toda a lista de A a Z, mais ou menos assim:Numero|Cod_autor51 Kin52 King53 King, J.54 King, P.55 Kings144 Naer145 Naev146 Naf45 Ole46 Oli47 Olip48 Oliv <--- Uhuuu, acharemos ele aqui! Retornaremos o numero 48. Mas como?49 Olivi51 Olm52 Olo53 OlyNão tenho nem idéia de como fazer isso... Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 21, 2010 Denunciar Share Postado Junho 21, 2010 tenta tirar o primero %:Select * From tabela Where 'Oliveira' Like Cutter + '%'se essa busca retornar mais de um dado é porque não tem o q fazer mesmo. exemplo, se no banco tiver 'Oliv' e 'Olive', como você sabe qual você quer?? se você quer 'Olive' porque tem mais letras, então, pelo asp, percorra o recordset e encontre a palavra maior com o Len(), tenta ai. Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Junho 21, 2010 Denunciar Share Postado Junho 21, 2010 Primeiro obrigado pela força kuroi!Mas não é isso, a busca não pode retornar mais que 1 dado.exemplo:"Antônio Flávio de Oliveira"1° Antes de fazer a busca temos que separar o último sobrenome, neste caso "Oliveira"já sabemos que a variável do exemplo é "Oliveira", ótimo.2° Na base de dados vai estar toda a lista de A a Z, mais ou menos assim:Numero|Cod_autor51 Kin52 King53 King, J.54 King, P.55 Kings144 Naer145 Naev146 Naf45 Ole46 Oli47 Olip48 Oliv <--- Uhuuu, acharemos ele aqui! Retornaremos o numero 48. Mas como?49 Olivi51 Olm52 Olo53 OlyNão tenho nem idéia de como fazer isso...Kara, mas o problema é que não existe um padrão de dados nessa coluna Cod_autor, porq, Oliv pode ser Olivi também? Até agora, pelo que entendi seria: você quer encontrar o Número do Autor procurando pela sua asisnatura? que estaria armazenada em Cod_autor?Fiz uma alteração na função permitindo passar por parametro a quantidade de caracteres que você deseja exibir para o último nome.<% Function RetornaLetra(strNome,caracteres) arrNome = split( strNome , " " ) RetornaLetra = left(arrNome( ubound( arrNome ) ) , caracteres ) End Function 'response.Write RetornaLetra("Arthur Bragança de Vasconcellos Weintraub",4) %> "SELECT cod FROM Cutter WHERE Cod_autor = ' " & RetornaLetra("Antônio Flávio de Oliveira",4) &" ' ORDER BY"Abraço Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 21, 2010 Autor Denunciar Share Postado Junho 21, 2010 Kara, mas o problema é que não existe um padrão de dados nessa coluna Cod_autor, porq, Oliv pode ser Olivi também? Não, a lógica é mais complexa:É como se fosse um filtro...O ---> na busca achou ---> Ol ---> na busca achou ---> li ---> na busca achou ---> iv ---> na busca achou ---> ve ---> na busca achou ---> não achou nada porque não existe, o código foi concluido, pois não tem a letra "e" no cód "Oliv".iraAté agora, pelo que entendi seria: você quer encontrar o Número do Autor procurando pela sua asisnatura? que estaria armazenada em Cod_autor?Sim quando acharmos a proximidade entre "Oliveira" e "Oliv", só tem um código para retornar que vai estar no campo numero (nesse caso é o 48)Também não tem uma exatidão nos caracteres na coluna cod_autor tem nomes bem distintos, tipo:133 Abbott, M.134 Abbott, S.111 Ba25 Edw26 EdwardsSei que é muito complexo, mas ainda não desisti. Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 22, 2010 Denunciar Share Postado Junho 22, 2010 (editado) na descricao do tópico ta escrito ASP + SQL, então achei q você usava banco sql, o codigo q passei serviria pro sql.vi agora q seu banco é access, então o codigo convertido pra sintaxe do access seria esse:Select * From tabela Where 'Oliveira' Like Cutter & '*'EDITADO:e quanto aos nomes "Abbott, M." por exemplo, esse M deve ser o primero nome da pessoa. então acho q você deveria pesquisar o nome nesse formato. exemplo, se o cara chama "Antônio Flávio de Oliveira", você procuraria por "Oliveira, A.". Editado Junho 22, 2010 por kuroi Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 22, 2010 Autor Denunciar Share Postado Junho 22, 2010 na descricao do tópico ta escrito ASP + SQL, então achei q você usava banco sql, o codigo q passei serviria pro sql.vi agora q seu banco é access, então o codigo convertido pra sintaxe do access seria esse:Select * From tabela Where 'Oliveira' Like Cutter & '*'EDITADO:e quanto aos nomes "Abbott, M." por exemplo, esse M deve ser o primero nome da pessoa. então acho q você deveria pesquisar o nome nesse formato. exemplo, se o cara chama "Antônio Flávio de Oliveira", você procuraria por "Oliveira, A.".Ok, vou tentar. Desculpe pelo título do tópico, pois até então não sabia qual a melhor forma de fazer essa busca, estava pensando até em delphi...Obrigado pela força, galerinha desse fórum responde mesmo! Gostei daqui. Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 22, 2010 Autor Denunciar Share Postado Junho 22, 2010 Pessoal,Realmente ta difícil de achar uma solução.Pensei o seguinte:Uma função para buscar "Oliveira", não achou busca por "Oliveir", não achou busca por "Olivei" e assim segue um loop até chegar no "Oliv".Porém nos nomes com ", A" não daria certo. :mellow: Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Junho 22, 2010 Denunciar Share Postado Junho 22, 2010 Kara, com Expressões Regulares da pra resolver isso, só não sei se o MS Access da suporte ou ASP.De uma pesquisada sobre o assunto. Link para o comentário Compartilhar em outros sites More sharing options...
0 kuroi Postado Junho 22, 2010 Denunciar Share Postado Junho 22, 2010 ainda, insistindo naquele codigo q passei...da uma olhada aqui, fiz um banco access com uma tabela com esses mesmos dados q você passou:chi.rarpor exemplo, execute esse codigo como consulta:Select * From tabela Where 'Oliveira' Like Cod_Autor & '*' ou: Select * From tabela Where 'Oliveira, A.' Like Cod_Autor & '*' veja q o retorno vai ser "oli" e "oliv". isso não tem mesmo como saber. ou você pega o primeiro, ou você da um jeito de tratar no asp. agora, esses nomes com uma letra no final. exemplo, "King, J." ou "King, P.", resolve se você passar essa ultima letra junto na query. exemplo: Select * From tabela Where 'King, J.' Like Cod_Autor & '*'por isso sugeri q você juntasse o sobrenome com a primera letra do primero nome.testa ai nesse banco q fiz. se você não sabe como executar consulta no access, faz o seguinte. com o banco aberto, clica no painel Objetos a esquerda, onde esta escrito Consultas. então clique em Criar consulta no modo Design. vai aparecer uma janela com o titulo "Mostrar tabela". fecha essa janela porque não vamos usar. la em cima, embaxo da opcao Arquivo do menu, o primero botao q tiver la, ao lado do disquete, tem uma flechinha ao lado. clica na flechinha e seleciona Modo SQL. vai aparecer o editor da query. então, la dentro copie um desses codigos q eu passei e clique no botao da exclamacao acima e veja o retorno q ele vai trazer.então testa essas querys q eu passei q você vai ver o retorno e você vai ver q ele ta selecionando os dados. Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 22, 2010 Autor Denunciar Share Postado Junho 22, 2010 ainda, insistindo naquele codigo q passei...da uma olhada aqui, fiz um banco access com uma tabela com esses mesmos dados q você passou:chi.rarpor exemplo, execute esse codigo como consulta:Select * From tabela Where 'Oliveira' Like Cod_Autor & '*' ou: Select * From tabela Where 'Oliveira, A.' Like Cod_Autor & '*' veja q o retorno vai ser "oli" e "oliv". isso não tem mesmo como saber. ou você pega o primeiro, ou você da um jeito de tratar no asp. agora, esses nomes com uma letra no final. exemplo, "King, J." ou "King, P.", resolve se você passar essa ultima letra junto na query. exemplo: Select * From tabela Where 'King, J.' Like Cod_Autor & '*'por isso sugeri q você juntasse o sobrenome com a primera letra do primero nome.testa ai nesse banco q fiz. se você não sabe como executar consulta no access, faz o seguinte. com o banco aberto, clica no painel Objetos a esquerda, onde esta escrito Consultas. então clique em Criar consulta no modo Design. vai aparecer uma janela com o titulo "Mostrar tabela". fecha essa janela porque não vamos usar. la em cima, embaxo da opcao Arquivo do menu, o primero botao q tiver la, ao lado do disquete, tem uma flechinha ao lado. clica na flechinha e seleciona Modo SQL. vai aparecer o editor da query. então, la dentro copie um desses codigos q eu passei e clique no botao da exclamacao acima e veja o retorno q ele vai trazer.então testa essas querys q eu passei q você vai ver o retorno e você vai ver q ele ta selecionando os dados.Acho que não tem jeito mesmo, vou tentar mostrar para o usuário o mínimo de opções possíveis, pois não posso alterar os dados da Tabela Cutter (é um padrão universal)http://www.davignon.qc.ca/cutter1.htmlVou tentar fazer o que o Romero sugeriu... Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 22, 2010 Autor Denunciar Share Postado Junho 22, 2010 Detalhe:O valor da busca na db que retorna tem que ser único, é para isso que serve a tabela cutter, existem milhões de nomes de autor no mundo mas o código para cada nome é único. Link para o comentário Compartilhar em outros sites More sharing options...
0 bareta Postado Junho 23, 2010 Denunciar Share Postado Junho 23, 2010 então... na verdade é o seguinte... ou tu testa o ultimo nome a cada letra buscando uma aproximação, ou usa like e deixa a lista do q parece para ser selecionada...o ol oli oliv ---> se acho correspondente aqui para e retorna este valor. olive Link para o comentário Compartilhar em outros sites More sharing options...
0 SuporteTecnico Postado Junho 28, 2010 Autor Denunciar Share Postado Junho 28, 2010 então... na verdade é o seguinte... ou tu testa o ultimo nome a cada letra buscando uma aproximação, ou usa like e deixa a lista do q parece para ser selecionada...o ol oli oliv ---> se acho correspondente aqui para e retorna este valor. olive Resolvido! <% '----------------------------------------------------------- Function RetornaSemLetraFinal(arrNome) RetornaSemLetraFinal = left(arrNome,(len(arrNome)-1)) End Function '----------------------------------------------------------- Function RetornaSemLetraFinalPV(arrNome) RetornaSemLetraFinalPV = left(arrNome,(len(arrNome)-4)) End Function '----------------------------------------------------------- SQL="SELECT CODIGOCUTTER FROM tbcutter WHERE NOMECUTTER = '" & pronto & "'" SET RS=CONEXAO.EXECUTE(SQL) if rs.eof then pronto = RetornaSemLetraFinalPV(pronto) Do While RS.eof SQL="SELECT CODIGOCUTTER, nomecutter FROM tbcutter WHERE NOMECUTTER = '" & pronto & "'" SET RS=CONEXAO.EXECUTE(SQL) pronto = RetornaSemLetraFinal(pronto) Loop if not RS.eof then cod_autor=RS("codigocutter") End If Else cod_autor=RS("codigocutter") End If %>Obrigado a todos que opinaram...\o/ Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
SuporteTecnico
Estou com um novo desafio e preciso de ajuda.
Preciso de uma busca no campo "nome" da tabela, que me retorne somente a primeira letra do último sobrenome.
Exemplo:
Arthur Bragança de Vasconcellos Weintraub => deve me retornar somente a letra "W"
Será que é possível isso?
Link para o comentário
Compartilhar em outros sites
21 respostass a esta questão
Posts Recomendados