ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[Resolvido]Contultar so numero de fone em campo com máscara

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
MacacoLoco
Novato
Novato


Registrado: Terça-Feira, 7 de Julho de 2015
Mensagens: 55

MensagemEnviada: Ter Ago 29, 2017 5:38 pm    Assunto: [Resolvido]Contultar so numero de fone em campo com máscara Responder com Citação

Delphi 7 + Firebird 2.0

Sei que é idiotice,mas já está feita há anos, gravar máscara num campo varchar(25), de telefone, há vários clientes usando, e alterar tudo....bem Preciso fazer uma consulta, via aplicação, onde irá consultar por parte do número, considerando que o campo está com máscara, que é no formato (012)3456-7890 e ao digitar "34567" por exemplo, não acha. (Ex: % + 'edit.text' + %).

Já tentei, pesquisei, eu sei que há formas, (retirar a máscara via aplicação, colocar SP, etc), mas estou tentando minimizar o trabalho fazendo tudo via uma sql, se eu conseguir será bem melhor. Até agora cheguei no código abaixo que me retorna só números com sql pura.

Porém, na hora de tecer uma sql que aninhe esta, pegando o texto do edit para buscar dentro dela, não consegui passar...

Tentei com exists, in, concatenar aninhando de tudo que é forma...

Código:
SELECT
CASE WHEN SUBSTRING(C.FONE1 FROM  1 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  1 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  2 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  2 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  3 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  3 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  4 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  4 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  5 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  5 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  6 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  6 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  7 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  7 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  8 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  8 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  9 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  9 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 10 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 10 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 11 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 11 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 12 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 12 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 13 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 13 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 14 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 14 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 15 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 15 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 16 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 16 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 17 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 17 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 18 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 18 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 19 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 19 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 20 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 20 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 21 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 21 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 22 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 22 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 23 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 23 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 24 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 24 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 25 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 25 FOR 1) ELSE '' END
/*AS SO_NUMERO*/
FROM TB_CLIENTE C



E para consultar, o cliente irá digitar parte num edit, tentei de várias formas, cheguei no máximo no "código?" abaixo, mas não funcionou como eu esperava:

Código:
SELECT
    Z.CODIGO,
    Z.NOME,
    Z.FONE1
FROM
    tbcliente Z
    WHERE
    '34567'  /*Exemplo de insercao, pegara do edit...*/
    IN
(
SELECT
(

SELECT
CASE WHEN SUBSTRING(C.FONE1 FROM  1 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  1 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  2 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  2 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  3 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  3 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  4 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  4 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  5 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  5 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  6 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  6 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  7 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  7 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  8 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  8 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  9 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  9 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 10 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 10 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 11 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 11 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 12 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 12 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 13 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 13 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 14 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 14 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 15 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 15 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 16 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 16 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 17 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 17 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 18 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 18 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 19 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 19 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 20 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 20 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 21 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 21 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 22 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 22 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 23 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 23 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 24 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 24 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 25 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 25 FOR 1) ELSE '' END
/*AS SO_NUMERO*/
FROM TBCLIENTE C
where
C.CODIGO = P.codigo
) as FONENUMEROS

    FROM
    tbcliente P



)



Mas ainda falta algo que não consegui, onde estou errando?


Editado pela última vez por MacacoLoco em Qua Ago 30, 2017 10:17 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Ago 29, 2017 6:43 pm    Assunto: Responder com Citação

Boa noite,

Utilizando a forma como você obteve só os números experimente liberar o Alias e utilizar o Like:

Código:
SELECT
    Z.CODIGO,
    Z.NOME,
    Z.FONE1
FROM
(
SELECT
    C.CODIGO,
    C.NOME,
    C.FONE1,

CASE WHEN SUBSTRING(C.FONE1 FROM  1 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  1 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  2 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  2 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  3 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  3 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  4 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  4 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  5 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  5 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  6 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  6 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  7 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  7 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  8 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  8 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM  9 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM  9 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 10 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 10 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 11 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 11 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 12 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 12 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 13 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 13 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 14 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 14 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 15 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 15 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 16 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 16 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 17 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 17 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 18 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 18 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 19 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 19 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 20 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 20 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 21 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 21 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 22 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 22 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 23 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 23 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 24 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 24 FOR 1) ELSE '' END ||
CASE WHEN SUBSTRING(C.FONE1 FROM 25 FOR 1) IN ('0','1','2','3','4','5','6','7','8','9') THEN SUBSTRING(C.FONE1 FROM 25 FOR 1) ELSE '' END
    AS SO_NUMERO
FROM TBCLIENTE C
) as Z
WHERE
    Z.SO_NUMERO like '%34567%'


Mas se a máscara está presente em todos os registros e com os caracteres (, ), e - sempre na mesma posição, acho que é possível eliminar os Cases.

Espero que ajude


Editado pela última vez por imex em Seg Dez 04, 2023 11:21 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
MacacoLoco
Novato
Novato


Registrado: Terça-Feira, 7 de Julho de 2015
Mensagens: 55

MensagemEnviada: Qua Ago 30, 2017 10:15 am    Assunto: Responder com Citação

Obrigado imex, sempre me salvando, você tem a manha. Eu tentei várias combinações, e boiei na hora de ligar a primeira sql na sql interna, deixei "as TESTE", e embaixo coloquei WHERE TESTE LIKE %34567%, claro, nem rodou no ibexpert, quando o correto seria "where TESTE.FONE1 like...".

Fico pensando em quantas vezes nós desistimos a 99% Rolling Eyes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qua Ago 30, 2017 10:54 am    Assunto: Responder com Citação

se tentar assim:

Código:
SELECT REPLACE( REPLACE( REPLACE(fone, '(' , '' )  , ')'  , '' ) , '-' , '' ) AS fone
FROM tabela


ou tentar usar expressoes regulares
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qua Ago 30, 2017 11:11 am    Assunto: Responder com Citação

REGEXP no mysql:

Código:
SELECT c.fone FROM clientes c
WHERE c.fone REGEXP '[0-9]'


ou

Código:
SELECT c.fone FROM clientes c
WHERE c.fone REGEXP '[[:digit:]]'

_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9099
Localização: Sinop-MT

MensagemEnviada: Qua Ago 30, 2017 11:14 am    Assunto: Responder com Citação

pro FB achei este link:

https://asfernandes.github.io/2014/03/31/artigo-novidades-do-firebird-25.html

é bem parecido com o MySQL as opcoes
_________________
<b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB