|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
MacacoLoco Novato
Registrado: Terça-Feira, 7 de Julho de 2015 Mensagens: 55
|
Enviada: Ter Ago 29, 2017 5:38 pm Assunto: [Resolvido]Contultar so numero de fone em campo com máscara |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Ago 29, 2017 6:43 pm Assunto: |
|
|
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 |
|
|
MacacoLoco Novato
Registrado: Terça-Feira, 7 de Julho de 2015 Mensagens: 55
|
Enviada: Qua Ago 30, 2017 10:15 am Assunto: |
|
|
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% |
|
Voltar ao Topo |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9099 Localização: Sinop-MT
|
Enviada: Qua Ago 30, 2017 10:54 am Assunto: |
|
|
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 |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9099 Localização: Sinop-MT
|
Enviada: Qua Ago 30, 2017 11:11 am Assunto: |
|
|
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 |
|
|
joemil Moderador
Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9099 Localização: Sinop-MT
|
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|