SQL, CASE, concat, substring

Uma pequena contribuição.

Em um Controle, num campo Select, necessitava exibir tanto o nome do cliente quanto o CPF/CNPJ formatado… a solução encontrada via SQL:

SELECT cli,
CASE when length(cli)=11 then
concat(cliente, ". ", substring(cli,1,3), ‘.’, substring(cli,4,3), ‘.’, substring(cli,7,3), ‘-’, substring(cli,10,2))
ELSE concat (cliente, ". ", substring(cli,1,2), ‘.’,substring(cli,3,3), ‘.’, substring(cli,6,3), ‘/’,substring(cli,9,4), ‘-’, substring(cli,13,2))
END
FROM tbCli
ORDER BY cliente

Onde tbCli é a tabela, cli = CPF/CNPJ e Cliente = nome do cliente.
Espero que possa ser útil.

2023-08-28 07_55_01-Window 2023-08-28 07_56_12-Window

2 Curtidas

Sua contribuição é muito bem vinda, mas gostaria de acrescentar que o melhor para esses casos é deixar uma view já criada com todas essas regras e campos, porque daí na hora de consumir (muitas vezes precisamos do mesmo lookup em mais de um local) fica mais fluido o codigo… Use a abuse das views.

3 Curtidas

Eu criaria functions em vez de view.

3 Curtidas

Oi Emerson! seguindo sua sugestão…

  1. No PHPMyAdmin criamos uma view:
    CREATE VIEW vwClientes AS
    SELECT cli,
    CASE when length(cli)=11 then
    concat(cliente, ". ", substring(cli,1,3), ‘.’, substring(cli,4,3), ‘.’, substring(cli,7,3), ‘-’, substring(cli,10,2))
    ELSE concat (cliente, ". ", substring(cli,1,2), ‘.’,substring(cli,3,3), ‘.’, substring(cli,6,3), ‘/’,substring(cli,9,4), ‘-’, substring(cli,13,2))
    END
    AS concatenado
    FROM tbCli
    ORDER BY cliente

  2. No SC no campo Select:
    SELECT cli, concatenado FROM vwClientes

Ficou bom, funciona.

0002 0003

1 Curtida

Outro pitaco: Eu faria essa view conter todos os campos, sugestao entao seria:

Create view vwClientes AS

SELECT

if(length(cli) > 11, ‘J’, ‘F’) AS cli_tipo /* caso nao tenha um campo rapido para dizer é PJ/PF */

, CASE when length(cli)=11 then
concat(cliente, ". ", substring(cli,1,3), ‘.’, substring(cli,4,3), ‘.’, substring(cli,7,3), ‘-’, substring(cli,10,2))
ELSE concat (cliente, ". ", substring(cli,1,2), ‘.’,substring(cli,3,3), ‘.’, substring(cli,6,3), ‘/’,substring(cli,9,4), ‘-’, substring(cli,13,2))
END
AS cli_cpfcnpj /* alterei o nome para ficar mais didatico */

, tbCli.* /* acrescenta todos os campos da tabela */

FROM tbCli

ORDER BY id_cliente /* veja qual é esse ID e o deixa indexado */

2 Curtidas