Clipper On Line • Ver Tópico - Apenas exemplo Substr()

Apenas exemplo Substr()

Discussão sobre SQL

Moderador: Moderadores

 

Apenas exemplo Substr()

Mensagempor JoséQuintas » 05 Jan 2020 15:18

Pelo que pesquisei, no MySQL 8.x tem a opção de usar REGEX no select, mas nos anteriores não.
Deixar aqui como um exemplo de possibilidades.

   WITH OBJECT cnMySql
      :cSql := "SELECT LPAD( IDESTOQUE, 6, '0' ) AS ID, ESITEM, ESDATLAN, ESCLIFOR, ESCFOP, ESPEDIDO, ESNUMDOC, ESTIPLAN, " + ;
         " ESQTDE  * IF( JPITEM.IEQTDCOM < 1, 1, JPITEM.IEQTDCOM ) AS QTDE," + ;
         " ESVALOR / IF( JPITEM.IEQTDCOM < 1, 1, JPITEM.IEQTDCOM ) AS VALOR," + ;
         " JPITEM.IEUNID AS UNIDADE, JPITEM.IEANP AS ANPPRO," + ;
         " JPCADASTRO.CDCNPJ AS CADCNPJ," + ;
         " JPCIDADE.CIIBGE AS IBGE," + ;
         " JPANPLOC.ALANP AS ANPLOC," + ;
         " JPANPINS.AIANP AS ANPINS," + ;
         " JPANPAGE.AAANP AS ANPAGE," + ;
         " JPANPATI.ATCNAE AS ANPATI," + ;
         " JPANPOPE.AOANPREG AS ANPOPEREG," + ;
         " JPANPOPE.AOANPNREG AS ANPOPENREG, " + ;
         " JPANPOPE.AOANPOUT AS ANPOPEOUT" + ;
         " FROM JPESTOQUE" + ;
         " LEFT JOIN JPITEM ON JPITEM.IDITEM=JPESTOQUE.ESITEM" + ;
         " LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO=JPESTOQUE.ESCLIFOR" + ;
         " LEFT JOIN JPCIDADE ON JPCADASTRO.CDUF=JPCIDADE.CIUF AND JPCADASTRO.CDCIDADE=JPCIDADE.CINOME" + ;
         " LEFT JOIN JPANPLOC ON JPANPLOC.ALIBGE=JPCIDADE.CIIBGE" + ;
         " LEFT JOIN JPANPINS ON JPANPINS.AICNPJ=IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
            " CONCAT( CONCAT( CONCAT( CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), " + ;
            " SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 ) ), SUBSTR( JPCADASTRO.CDCNPJ, 8, 3 ) ), " + ;
            " SUBSTR( JPCADASTRO.CDCNPJ, 12, 4 ) ), SUBSTR( JPCADASTRO.CDCNPJ, 17, 2 ) ), 'X' )" + ;
         " LEFT JOIN JPANPAGE ON JPANPAGE.AACNPJ=IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
            " CONCAT( CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 ) ), SUBSTR( CDCNPJ, 8, 3 ) ), 'X' )" + ;
         " LEFT JOIN JPANPOPE ON JPANPOPE.AOCFOP=JPESTOQUE.ESCFOP" + ;
         " LEFT JOIN JPANPATI ON JPANPATI.ATCNAE=LEFT(JPCADASTRO.CDCNAE,5)" + ;
         " WHERE ESDATLAN BETWEEN CAST( " + DateSql( dDataInicial ) + " AS DATE )" + ;
         " AND CAST( "  + DateSql( dDataFinal ) + " AS DATE )"
      :cSql += " AND JPITEM.IEANP IN ( " + ProdutoAnp( "", .T. ) + " )"
      :cSql += " AND ESQTDE <> 0"
      :cSql += " ORDER BY ESDATLAN"
      :Execute()


Esse é daqueles fontes demorados pra converter total.
Anulei várias vezes as alterações, porque os totais não batiam.

Acabei usando um método radical: comecei com SELECT *, demorado mas pelo menos com total batido, funcionando.
Devagar fui substituindo um pedaço do fonte por mais um pedaço de comando SQL, e testando se continuava batido.
Até agora tudo certo.
E o SELECT * agora virou um SELECTÃO kkkk
Mas o fonte... simplificou muuuito.

Isso tem a ver com o arquivo enviado pra ANP (Agência Nacional do Petróleo).
Eles tem tabela pra quase tudo que é tranqueira, e tem que enviar com o código deles, e não o do sistema.

Ainda vou tentar fazer mais ajustes, pra eliminar mais fonte PRG...
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

Apenas exemplo Substr()

Mensagempor JoséQuintas » 06 Jan 2020 01:47

Aconteceu uma coisa interessante nesse troço... aliás... mais de uma.

Tinha código duplicado nos CNAEs... isso multiplicava registros. Acrescentei rotina pra eliminar duplicados.

O mais interessante:
Relaciono quase tudo pelo número de pedido mas....
De estoque direto para nota... problema... porque tem estoque sem pedido e nota sem pedido, acabam sendo relacionados e multiplicando 853 registros pra mais de 80.000

Solução: outro relacionamento
Relacionei estoque com pedido, e pedido com nota fiscal
Ao relacionar com pedido, número zerado não encontra pedido, e ao relacionar pedido com nota fiscal, também não encontra nota fiscal - fim do problema com zerados
Foi uma idéia que deu certo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18152
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 11 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro