Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alex_ps

Replace Na Cláusula Where De Um Select

Recommended Posts

Amigos,

 

Estou tentando resolver um problema de um Select em um banco de dados Access, mas apesar de pesquisas e várias tentativas, a coisa não saíu do lugar, com diversos tipos de erro, desde erro de sintaxe até a informação de que a função replace não foi definida, o que é um absurdo.

 

Talvez algum de vocês já tenha visto algo parecido e possa dar uma força, por favor:

"Select * from tabela where Replace(coluna1,".","") like '%"&varcoluna1&"%' or coluna1 like '%"&varcoluna1&"%' order by coluna2 asc"

 

Explicando melhor, na coluna1 tem o código de um produto, algo como 234.235.12.

Eu preciso fazer com que o select responda a busca, mesmo se for digitado apenas 23423512 (sem os pontos).

A simples colocação do "like" ao invés do "=" não está adiantando.

 

Antes de pensar no replace, eu pensei em adicionar uma máscara no número digitado sem os pontos, para poder transformá-lo no número com pontuação e só depois realizar a busca. Porém, os números são totalmente sem padrão, e as pontuações também, o que impossibilita a máscara.

 

E é isto!

 

Alguém pode dar uma ajuda?

 

Obrigado!

 

Alex_ps

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

"Select * from tabela where "&Replace(coluna1,".","")&" like '%"&varcoluna1&"%' or coluna1 like '%"&varcoluna1&"%' order by coluna2 asc"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se os números são sem padrão, porque você simplesmente não elimina essa pontuação, assim não precisa fazer mascara e tb não quebra a cabeça.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Senhores,

 

Muito obrigado por suas respostas!

 

Bueno,

 

Seguindo seu exemplo, se no Replace eu colocar a variável (coluna1) sem aspas, recebo uma resposta de que a variável não foi definida, e não foi mesmo, pois não é uma variável mas sim o nome de uma coluna de uma tabela.

"Select * from tabela where "&Replace(coluna1,".","")&" like '%"&varcoluna1&"%' or coluna1 like '%"&varcoluna1&"%' order by coluna2 asc"

Se eu colocar a variável com aspas, o resultado é nenhum arquivo foi encontrado.

"Select * from tabela where "&Replace("coluna1",".","")&" like '%"&varcoluna1&"%' or coluna1 like '%"&varcoluna1&"%' order by coluna2 asc"

A não ser que eu esteja comendo alguma bola, meu raciocínio foi o mesmo que o seu, mas infelizmente não consegui.

 

LCS

O e-mail de resposta que está pronto para enviar para o meu cliente, é exatamente sua sugestão!

Porém, como partiu dele a solicitação do cadastro do código do produto com os pontos e depois, ele somente pediu para a pesquisa responder às duas situações, primeiro eu estou tentando ver se é possível fazer este código funcionar, caso não seja, responderei que não dá em função da falta de padrão da pontuação.

 

Agradeço a gentileza da ajuda de vocês.

 

Alex_ps

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode ter um função para usar vários replace, como num exemplo de SQLInject

 

Function SafeSQL(sInput)
 TempString = sInput
 'sBadChars=array("select", "drop", ";", "--", "insert", "delete", "xp_", "#", "%", "&", "'", "(", ")", "/", "\", ":", ";", "<", ">", "=", "[", "]", "?", "`", "|") 
 sBadChars=array("select", "drop", ";", "--", "insert", "delete", "xp_", "#", "%", "&", "'", "(", ")", ":", ";", "<", ">", "=", "[", "]", "?", "`", "|") 
 For iCounter = 0 to uBound(sBadChars)
   TempString = replace(TempString,sBadChars(iCounter),"")
 Next
 SafeSQL = TempString
End function

 

e usar a função direto na string SQL

 

SQLc = "SELECT * FROM Cal_ColorSchemes WHERE ColorSchemeID = " & SafeSQL(request.querystring("colorschemeID"))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Xanburzum,

 

Obrigado por sua sugestão!

Porém, não sei se eu não entendi direito seu objetivo, ou se você não entendeu direito o meu problema.

No caso, para eu poder utilizar a função do jeito que você sugeriu, eu creio que precisaria conhecer todas as variantes de composição dos números do produto, que aparecem na sugestão do seu Replace, ou seja, várias máscaras em uma.

Como isto não é possível, pois não existe uma única lógica ou, várias que somadas resolvam o problema, eu estava tentando retirar, diretamente da coluna, ainda no select, os pontos.

Imagine um replace não na variável, mas na coluna!

Aí é que estou com problemas, pois depois de vários testes, acho que não é possível fazer isto.

De qualquer forma, valeu pela força.

 

Alex_ps

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.