Pegando um intervalo de datas em SQLITE

Iniciado por rafael, Março 01, 2017, 01:53:32 PM

tópico anterior - próximo tópico

rafael

Primeiramente o SQLITE não trata datas diretamente.

Então temos que transformar em números para fazer a consulta:

Datainicial = "01-01-2017"
Datafinal = "31/12/2017"
Datainicial = Datainicial:troque("(.*)-(.*)-(.*)","%3%2%1" ) //inverte as posições de dia e ano
Datafinal = Datafinal:troque("(.*)/(.*)/(.*)","%3%2%1" ) // também remove a barra /  e o traço -
//RESULTADO: Datainicial = "20170101" , Datafinal = "20171231"



Então passamos os comandos para o banco pesquisar:

NOTE QUE:
As datas foram gravadas no tipo TEXT e ficaram assim: dd-mm-aaaa

ret , res = sql.prepare_v2( base , ([[
SELECT *
FROM Tabela
WHERE DATE(substr(ColunaVencimento,7,4)
||substr(ColunaVencimento,4,2)
||substr(ColunaVencimento,1,2))
BETWEEN DATE(]]..Datainicial..[[) AND DATE(]]..Datafinal..[[)
;]]) );


Perceba:

SELECIONE TUDO DA TABELA ONDE
PEGUE OS VALORES DA COLUNA VENCIMENTO COMEÇANDO DO 7 CONTE 4 VAI ATÉ O 10
|| PEGUE OS VALORES DA COLUNA VENCIMENTO COMEÇANDO DO 4 CONTE 2 VAI ATÉ O 5
|| PEGUE OS VALORES DA COLUNA VENCIMENTO COMEÇANDO DO 1 CONTE 2 VAI ATÉ O 2
OS VALORES FORAM CAPTURADOS E REPOSICIONADOS, AGORA VEM A CONDICIONAL:
ENTRE A DATA INICIAL E DATA FINAL

AS BARRAS VERTICAIS CONCATENAM OS VALORES RECEBIDOS

adalberto

Muito importante esse código para quem quer desenvolver um sistema comercial.
Obrigado pela contribuição!