 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Seg Set 09, 2019 4:23 pm Assunto: Ajuda com IIF ou Case no Firebird? |
|
|
Preciso saber como fazer esta logica aqui, tentei com os doi métodos que conheco e quando cai na segunda opção vem zerado
Código: | SELECT
IIF(cidade.cidade_cep <> '', cidade.cidade_cep, endereco.endereco_cep) as cep1,
CASE
WHEN cidade.cidade_cep <> '' then
cidade.cidade_cep
ELSE
endereco.endereco_cep
END AS cep, |
O select que montei completo
Código: | SELECT
IIF(cidade.cidade_cep <> '', cidade.cidade_cep, endereco.endereco_cep) as cep1,
CASE
WHEN cidade.cidade_cep <> '' then
cidade.cidade_cep
ELSE
endereco.endereco_cep
END AS cep,
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao,
cidade.cidade_descricao,
UF.uf_sigla
FROM CIDADE
LEFT join uf ON uf.uf_codigo = cidade.uf_codigo
LEFT join bairro ON bairro.cidade_codigo = cidade.cidade_codigo
LEFT join endereco ON endereco.bairro_codigo = bairro.bairro_codigo
WHERE
-- (upper(uf.uf_sigla) like :pbusca)
--000 OR
(endereco.endereco_cep = :pbusca
or cidade.cidade_cep = :pbusca)
or (upper(bairro.bairro_descricao) like :pbusca)
or (upper(cidade.cidade_descricao) like :pbusca) |
_________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Seg Set 09, 2019 9:12 pm Assunto: |
|
|
Boa noite,
Pelo que entendi do seu código, tanto com o IIF como com o Case, se a coluna cidade_cep estiver em branco é retornada a coluna endereco_cep, mas pelo menos na teoria acho que pode acontecer da coluna endereco_cep também não estar preenchida ou ainda de não existir um registro relacionado já que estão sendos utilizados Left Joins.
Espero que ajude
Editado pela última vez por imex em Dom Out 01, 2023 5:39 pm, num total de 2 vezes |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Set 10, 2019 11:19 am Assunto: |
|
|
imex escreveu: | Boa noite,
Pelo que entendi do seu código, tanto com o IIF como com o Case, se a coluna cidade_cep estiver em branco é retornada a coluna endereco_cep, mas pelo menos na teoria acho que pode acontecer da coluna endereco_cep também não estar preenchida ou ainda de não existir um registro relacionado já que estão sendos utilizados Left Joins.
Espero que ajude
|
Bom dia, estava colocando errado em vez de '' tem que ser 0 ai deu certo Imex.
Outra coisa tem como consultar ou por um ou por outro campo no mesmo parametro?
Assim ta dando erro
Código: | SELECT
IIF(cidade.cidade_cep <> 0, cidade.cidade_cep, endereco.endereco_cep) as cep1,
/*$$IBEC$$ CASE
WHEN cidade.cidade_cep <> '' then
cidade.cidade_cep
ELSE
endereco.endereco_cep
END AS cep, $$IBEC$$*/
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao,
cidade.cidade_descricao,
UF.uf_sigla
FROM CIDADE
LEFT join uf ON uf.uf_codigo = cidade.uf_codigo
LEFT join bairro ON bairro.cidade_codigo = cidade.cidade_codigo
LEFT join endereco ON endereco.bairro_codigo = bairro.bairro_codigo
WHERE
(endereco.endereco_cep = :pbusca
or cidade.cidade_cep = :pbusca)
or (upper(uf.uf_sigla) like :pbusca)
or (upper(bairro.bairro_descricao) like :pbusca)
or (upper(cidade.cidade_descricao) like :pbusca)
or (upper(endereco.endereco_logradouro) like :pbusca
or upper(endereco.endereco_logradouro) like :pbusca ) |
arithmetic exception, numeric overflow, or string truncation, string rigth truncation _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Set 10, 2019 11:42 am Assunto: |
|
|
Bom dia,
O erro está ocorrendo com o campo CEP? Esse campo é numérico? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Set 10, 2019 12:01 pm Assunto: |
|
|
Acho que se o campo é varchar o zero deveria estar entre aspas na condição do IIF ou do Case.
Você tem certeza que esse erro está ocorrendo no Where? |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Set 10, 2019 1:47 pm Assunto: |
|
|
imex escreveu: | Acho que se o campo é varchar o zero deveria estar entre aspas na condição do IIF ou do Case.
Você tem certeza que esse erro está ocorrendo no Where? |
Assim veja no parametro digitei %CAMPO%
O Select com UF
Código: | SELECT
IIF((cidade.cidade_cep <> '0') and (cidade.cidade_cep <> ''), cidade.cidade_cep, endereco.endereco_cep) as cep1,
/*$$IBEC$$ CASE
WHEN cidade.cidade_cep <> '' then
cidade.cidade_cep
ELSE
endereco.endereco_cep
END AS cep, $$IBEC$$*/
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao,
cidade.cidade_descricao,
UF.uf_sigla
FROM CIDADE
LEFT join uf ON uf.uf_codigo = cidade.uf_codigo
LEFT join bairro ON bairro.cidade_codigo = cidade.cidade_codigo
LEFT join endereco ON endereco.bairro_codigo = bairro.bairro_codigo
WHERE
(endereco.endereco_cep = :pbusca
or cidade.cidade_cep = :pbusca)
or (upper(uf.uf_sigla) like :pbusca)
or (upper(bairro.bairro_descricao) like :pbusca)
or (upper(cidade.cidade_descricao) like :pbusca)
--or (upper(endereco.endereco_logradouro) like :pbusca
-- or upper(endereco.endereco_logradouro) like :pbusca ) |
Da o erro
arithmetic exception, numeric overflow, or string truncation, string rigth truncation
Se eu comento o campo
or (upper(uf.uf_sigla) like :pbusca)
Traz o resultado no select
Mais neste mesmo select com o UF comentado aonde digitei %CAMPO% se eu alterar para %CAMPO M% novamente da o erro
arithmetic exception, numeric overflow, or string truncation, string rigth truncation _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Set 10, 2019 2:16 pm Assunto: |
|
|
Desconfio que esse erro está ocorrendo quando o parâmetro possui mais caracteres que o tamanho do campo. Se o problema for esse mesmo, acho que uma alternativa seria limitar o tamanho do parâmetro ao tamanho do campo, apesar que isso pode afetar o resultado obtido. Ex:
Código: | or (upper(uf.uf_sigla) like left(:pbusca, 2)) |
Outra alternativa seria utilizar um Cast ou Convert para aumentar o tamanho do campo antes de comparar, mas isso pode afetar um pouco o desempenho. Ex:
Código: | or (upper(cast(uf.uf_sigla as varchar(50))) like :pbusca) |
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Set 10, 2019 2:33 pm Assunto: |
|
|
imex escreveu: | Desconfio que esse erro está ocorrendo quando o parâmetro possui mais caracteres que o tamanho do campo. Se o problema for esse mesmo, acho que uma alternativa seria limitar o tamanho do parâmetro ao tamanho do campo, apesar que isso pode afetar o resultado obtido. Ex:
Código: | or (upper(uf.uf_sigla) like left(:pbusca, 2)) |
Outra alternativa seria utilizar um Cast ou Convert para aumentar o tamanho do campo antes de comparar, mas isso pode afetar um pouco o desempenho. Ex:
Código: | or (upper(cast(uf.uf_sigla as varchar(50))) like :pbusca) |
Espero que ajude |
Deste jeito aqui
Código: | SELECT
IIF((cidade.cidade_cep <> '0') and (cidade.cidade_cep <> ''), cidade.cidade_cep, endereco.endereco_cep) as cep1,
/*$$IBEC$$ CASE
WHEN cidade.cidade_cep <> '' then
cidade.cidade_cep
ELSE
endereco.endereco_cep
END AS cep, $$IBEC$$*/
endereco.endereco_logradouro,
endereco.endereco_complemento,
bairro.bairro_descricao,
cidade.cidade_descricao,
UF.uf_sigla
FROM CIDADE
LEFT join uf ON uf.uf_codigo = cidade.uf_codigo
LEFT join bairro ON bairro.cidade_codigo = cidade.cidade_codigo
LEFT join endereco ON endereco.bairro_codigo = bairro.bairro_codigo
WHERE
((CAST(endereco.endereco_cep AS VARCHAR(50)) = :pbusca)
or (CAST(cidade.cidade_cep as VARCHAR(50)) = :pbusca))
or
(upper(cast(uf.uf_sigla as varchar(50))) = :pbusca)
or (upper(cast(bairro.bairro_descricao as varchar(50))) like :pbusca)
or (upper(cast(cidade.cidade_descricao as varchar(50))) like :pbusca)
--or (upper(endereco.endereco_logradouro) like :pbusca
-- or upper(endereco.endereco_logradouro) like :pbusca ) |
Se eu digitar %CURITIBA% Me trouxe uma lista no CAMPO BAIRRO_DESCRICAO
JARDIM CURITIBA da cidade de GOIANIA-GO
Porém ao navegar na lsuta ele chega um momento que da o erro novamente.
arithmetic exception, numeric overflow, or string truncation, string rigth truncation
Ja o problema no UF se eu digitar PR ele me traz o result do Paraná.
Desta forma
Código: | or (upper(uf.uf_sigla) like left(:pbusca, 2)) |
Meu firebird não reconheceu. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Set 10, 2019 3:25 pm Assunto: |
|
|
Esse erro ao navegar pelo resultado ocorre no IBExpert ou outra ferramenta semelhante?
Sobre a função Left, ela foi adicionada a partir da versão 2.1. Se você estiver utilizando uma versão mais antiga pode experimentar essa outra versão com a função Substring. Ex:
Código: | or (upper(uf.uf_sigla) like substring(:pbusca from 1 for 2)) |
Espero que ajude |
|
Voltar ao Topo |
|
 |
adriano_servitec Colaborador

Registrado: Sexta-Feira, 30 de Janeiro de 2004 Mensagens: 17618
|
Enviada: Ter Set 10, 2019 3:51 pm Assunto: |
|
|
imex escreveu: | Esse erro ao navegar pelo resultado ocorre no IBExpert ou outra ferramenta semelhante?
Sobre a função Left, ela foi adicionada a partir da versão 2.1. Se você estiver utilizando uma versão mais antiga pode experimentar essa outra versão com a função Substring. Ex:
Código: | or (upper(uf.uf_sigla) like substring(:pbusca from 1 for 2)) |
Espero que ajude |
Estou executando no ibexpert
Meu firebird 2.5
Assim funcionou
Código: | or (upper(uf.uf_sigla) like substring(:pbusca from 1 for 2)) | , mais ainda estou com o erro de arithmetic exception, numeric overflow, or string truncation, string rigth truncation
Acho que vou separar este select ai, pode estar sendo interpretado como algo confuso pelo select. _________________ Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|