Replace Na Instrução
#1
Posted 26/06/2008, 23:44
uma lista de letras
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Cada letra é um link que leva a uma página e que lista os autores que começam com essa letra:
select * from tabela where left(autor,1) = request.querystring("letra")
A dúvida que não quer calar:
E o Érico? e o Ïves? Eles não aparecem. No cadastro, alguns autores possuem a primeira letra acentuada. como eu posso fazer com que esse left(autor,1) ignore a acentuação? :'(
#2
Posted 27/06/2008, 00:02
se você não conseguir me da um toque aqui no forum que eu monto rapidinho pra vc..
mas saca só..
teremos acento somente em vogais certo? não temos como ter acento em F J... dai faremos o seguinte usaremos replace nas vogais aos seus respectivos caracteres alfa numericos..
fazendo um select case nas mesmas e substituindo por somente a letra correspondente sem acento..
entendeu?
#3
Posted 27/06/2008, 21:39
por exemplo, a querystring é E, mas eu gostaria que listasse Érico, Ênio e Ester, valores presentes ca tabela de dados.
não quero fazer o
"select * from tabela where coluna='" & querystring_sem_acento
eu quero:
"select * from tabela where coluna_sem_acento='" & querystring
daí se o cara for Érico, ênio ou Ëuler, ele vail ser listado
#4
Posted 28/06/2008, 00:03
"select * from tabela where left(autor,1) LIKE '" & request.querystring("letra") & "%'"
Pelo que me lembro, o LIKE não faz diferença de palavras acentuadas.
Edição feita por: marciovmartins, 28/06/2008, 00:04.
#5
Posted 28/06/2008, 16:23
o like não fungou lá, continua sem aparecer o Érico Veríssimo
#6
Posted 28/06/2008, 19:11
o caso do acento estaria incluso ai
#7
Posted 28/06/2008, 22:31
functio rancabasso(str)
daí eu fiz
select * FROM tabela where rancabasso(left(coluna,1)) ='" querystring...
e não deu certo.
algm tem uma história de sucesso para me contar com relação a isso?
#8
Posted 29/06/2008, 02:27
#9
Posted 29/06/2008, 18:52
Realmente o LIKE não diferencia palavras acentuadas. Isso só poderia acontecer se seu SQL Server (se for o banco de dados que você está usando, claro), estivesse configurado para isso.
O que você pode fazer é dar uma olhada em posts aqui no próprio fórum, sobre acentuação...
Tem uma área aqui do ASP, só com funções cedidas por usuários, que podem lhe atender neste problema... Funções que tiram os acentos...
Com isso, você pode fazer a busca perfeita, CONTANTO que os dados do seu banco TAMBÉM estejam sem acento.
Abraços, boa sorte!
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil
#10
Posted 30/06/2008, 07:30
function RancaBaço(StrAcento) for i = 1 to len(StrAcento) Letra = mid(StrAcento, i, 1) Select Case Letra Case "á","Á","à","À","ã","Ã","â","Â","â","ä","Ä" Letra = "A" Case "é","É","ê","Ê","Ë","ë","È","è" Letra = "E" Case "í","Í","ï","Ï","Ì","ì" Letra = "I" Case "ó","Ó","ô","Ô","õ","Õ","ö","Ö","ò","Ò" Letra = "O" Case "ú","Ú","Ù","ù","ú","û","ü","Ü","Û" Letra = "U" Case "ç","Ç" Letra = "C" Case "ñ" Letra = "N" End Select texto = texto & Letra next TiraAcento = texto end function
daí eu colocaria
set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE RancaBaço(coluna) ='" & minha_query & "'"
#11
Posted 30/06/2008, 10:32
do que ficar por partes...
manda a sua pagina de busca e seu resultado ai..
#12
Posted 30/06/2008, 11:10
Não confunda SQL com ASP... Os 2 podem agir em conjunto, porém, não são a mesma coisa...a função é essa:
function RancaBaço(StrAcento) for i = 1 to len(StrAcento) Letra = mid(StrAcento, i, 1) Select Case Letra Case "á","Á","à","À","ã","Ã","â","Â","â","ä","Ä" Letra = "A" Case "é","É","ê","Ê","Ë","ë","È","è" Letra = "E" Case "í","Í","ï","Ï","Ì","ì" Letra = "I" Case "ó","Ó","ô","Ô","õ","Õ","ö","Ö","ò","Ò" Letra = "O" Case "ú","Ú","Ù","ù","ú","û","ü","Ü","Û" Letra = "U" Case "ç","Ç" Letra = "C" Case "ñ" Letra = "N" End Select texto = texto & Letra next TiraAcento = texto end function
daí eu colocaria
set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE RancaBaço(coluna) ='" & minha_query & "'"
Você botou a função 'RancaBaço' dentro da instrução SQL. Ao rodar, com certeza vai dar erro, pois NÃO existe essa função DENTRO do SQL... Ela foi criada dentro do seu código ASP, portanto, faz parte somente DELE.
Antes de mais nada, nomes de funções não podem ter quaisquer tipos de acentuação.
Experimente usar a função 'RancaBaco' da seguinte forma:
Abraços, boa sorte!set RS = Conexao.EXECUTE("SELECT * FROM tabela WHERE coluna ='" & RancaBaco(minha_query) & "'"
Edição feita por: Tarkan, 30/06/2008, 11:11.
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil
#13
Posted 30/06/2008, 21:38
acredite, eu já usei rancabaco, tratapalavra, tiraacento e não fungou, o nome da função é indiferente, porque não estou vendo um meio de tratar os valores que vêm do banco de dados, mas só os valores das querys.
#14
Posted 30/06/2008, 22:20
Quando falei pra vc trocar o nome da função, foi por causa do ç, que estava nela.
Acentuações em nomes de funçoes e/ou variáveis, não existe em programação. Agora se o nome é Rancabaco (sem o ç) ou Rancatudo ou qualquer outro, isso sim, realmente é indiferente.
Quanto a não retornar o resultado, isso com certeza não vai trazer, se os dados não forem EQUIVALENTES ao que você está passando para o banco de dados.
Exemplo: Se sua função Rancabaco está tirando os acentos e está jogando isso para a instrução SQL, você está solicitando do SQL dados que também estejam sem acento. Os que tiverem acento, com certeza não vão voltar...
Como eu disse no meu post acima:
Entendeu?Realmente o LIKE não diferencia palavras acentuadas. Isso só poderia acontecer se seu SQL Server (se for o banco de dados que você está usando, claro), estivesse configurado para isso.
...
Com isso, você pode fazer a busca perfeita, CONTANTO que os dados do seu banco TAMBÉM estejam sem acento.
Maneiras de resolver:
Se você tem acesso a configuração do servidor de banco de dados, configure o seu banco para aceitar buscas que não tenham accent-sensitive (sei lá se escrevi certo);
- Com isso, você nem precisa da função Rancabaco, pois o SQL vai te devolver o resultado com ou sem acento.
Se você não tem acesso a configuração do servidor de banco de dados, experimente dar update na sua tabela de dados, usando replace em todos os dados do seu banco, para TIRAR TODOS os acentos.
- Com isso, todos os dados sem acento (retirados pela função Rancabaco) serão exibidos normalmente.
Abraços, boa sorte!
------------------------------------------------------------------------
EDITANDO:
Rapaz... Pensei melhor... Nem precisa de update e nem de configurar nada!
Qual banco de dados você está usando, SQL Server?
Experimente fazer uma função Rancabaco TAMBÉM no SQL...
Bote depois esta função no WHERE da sua consulta e insira esta consulta numa stored procedure, que será chamada pelo ASP.
Ficará algo do tipo:
E para chamar, no ASP:CREATE PROCEDURE ListaTudo
@texto varchar(256)
AS
SELECT * FROM tabela WHERE dbo.Rancabaco(coluna) LIKE '%' + @texto + '%'
Abraços, boa sorte!set RS = Conexao.EXECUTE("EXEC ListaTudo '" & RancaBaco(minha_query) & "'")
Edição feita por: Tarkan, 30/06/2008, 22:21.
' profissão: ALOG Data Centers do Brasil (analista de sistemas)
' publicidade: ALOG Data Centers do Brasil
#15
Posted 08/12/2008, 10:06
Vc já tentou usar TRANSLATE(COLUNA,'ÁÇÉÍÓÚ.......','ACEIOU......')''
Espero ter ajudado.
Abraço.
Analista de Sistema Senior
Tel.: + 55 - (21) 3824-4698- Cel: + 55 - (21) 9127-2772
E-Mail: andre.figueiredo@veirano.com.br
Skype: andre.figueiredo.veirano.com.br
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)