Select data no SQLite

E aí pessoal! Beleza?
Não estou conseguindo fazer consultas com datas no sqlite, estou salvando nesse string no formato dd/MM/yyyy. Será que tem algum problema?
obs: código abaixo.

Banco

String sqlHistoricoPag = “CREATE TABLE " + TABELA_HISTORICO_PAGAMENTOS + " (”
+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "vencimento TEXT, "
+ "dataBaixa TEXT, "
+ "documento TEXT, "
+ "historico TEXT, "
+ "origem TEXT, "
+ "valor TEXT, "
+ "desconto TEXT, "
+ "multa TEXT, "
+ "juros TEXT, "
+ "valorTotal TEXT, "
+ "descricao TEXT, "
+ “valorItem TEXT”
+ “);”;

db.execSQL(sqlHistoricoPag);

Consulta

public List getListaTeste() {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(
“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = 15/03/2017”,
null);

    List<HistoricoPagamentos> lista = new ArrayList<HistoricoPagamentos>();
    while (cursor.moveToNext()) {
        HistoricoPagamentos h = new HistoricoPagamentos();
        h.setVencimento(cursor.getString(cursor.getColumnIndex("vencimento")));
        h.setDataBaixa(cursor.getString(cursor.getColumnIndex("dataBaixa")));
        h.setDocumento(cursor.getString(cursor.getColumnIndex("documento")));
        h.setHistorico(cursor.getString(cursor.getColumnIndex("historico")));
        h.setOrigem(cursor.getString(cursor.getColumnIndex("origem")));
        h.setValor(cursor.getString(cursor.getColumnIndex("valor")));
        h.setDesconto(cursor.getString(cursor.getColumnIndex("desconto")));
        h.setMulta(cursor.getString(cursor.getColumnIndex("multa")));
        h.setJuros(cursor.getString(cursor.getColumnIndex("juros")));
        h.setValorTotal(cursor.getString(cursor.getColumnIndex("valorTotal")));
        h.setDescricao(cursor.getString(cursor.getColumnIndex("descricao")));
        h.setValorItem(cursor.getString(cursor.getColumnIndex("valorItem")));
        lista.add(h);
    }
    return lista;
}

Nessa consulta o retorno é igual a nada

Primeiro, por que colocar datas como string no banco de dados se existem tipos que aceitam datas, horas e datas com horas?
Segundo, quando você deseja comparar duas strings, precisa colocar o valor a ser comparado entre aspas simples ...WHERE colunaQueTemString = 'valorEntreAspasSimples' AND ...

1 curtida

Bom dia drsmachado!
1 - Então, o WebService retorna desse jeito e eu só estou repassando colocando o mesmo tipo de dados. Mas se tiver alguma sugestão de como melhorar, por favor, me fale :slight_smile:

2 - Deu certo só com a primeira data, por exemplo:

“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = ‘07/11/2016’”

Se eu colocar dessa forma:

“SELECT * FROM " + TABELA_HISTORICO_PAGAMENTOS + " WHERE dataBaixa = ‘07/11/2016’ AND ‘07/12/2016’”

A consulta até me retorna as datas, mas só as de 07/11/2016

Esse seu select não vai funcionar, por que você está usando o operador AND, ou seja, não existe nenhum histórico que atenda a regra da consulta, pois não existe nenhum pagamento com a dataBaixa = 07/11/2016 “E” 07/12/2016, ou seja a dataBaixa teria que ter as duas datas juntas em um único registro para que fosse possível recupera-la.

monte o seu select usando o operador OR, isso já deve resolver o seu problema, pois assim a consulta buscará registros que possuam a data de baixa em 07/11/2016 OU 07/12/2016.

"SELECT * FROM"+ TABELA_HISTORICO_PAGAMENTOS +"WHERE dataBaixa = '07/11/2016' OR dataBaixa = '07/12/2016'"

1 curtida

Valeu Jonathan deu certo!
Se eu quiser fazer consultar pra trazer as datas das baixas dos últimos três meses?
Vou ter que usar a consulta desse jeito?

“SELECT * FROM”+ TABELA_HISTORICO_PAGAMENTOS +“WHERE dataBaixa = ‘07/11/2016’ OR dataBaixa = ‘07/12/2016’ OR dataBaixa = '07/10/2016”

Últimos 6 meses:

“SELECT * FROM”+ TABELA_HISTORICO_PAGAMENTOS +“WHERE dataBaixa = ‘07/11/2016’ OR dataBaixa = ‘07/12/2016’ OR dataBaixa = '07/10/2016 OR …”

Será que não tem uma consulta com menos códigos?

Nesse caso já não convém utilizar comparação por datas desta maneira, já seria viável a utilização do BETWEEN

Exemplo:
"SELECT * FROM"+ TABELA_HISTORICO_PAGAMENTOS +"WHERE dataBaixa BETWEEN '07/10/2016' AND '07/12/2016"

O comando BETWEEN é bem simples, ele busca todos os registros entre um intervalo de datas, como te mostrei no exemplo acima, o que ele está fazendo é nada mais nada menos do que buscando pra mim o histórico de pagamentos onde a dataBaixa está entre 07/10/2016 e 07/12/2016.

Valeu Jonathan! Deu certo :slight_smile: