SQLite - SQL para converter "data" tipo Long para String

1,598 views
Skip to first unread message

Felipe Aron

unread,
Oct 22, 2012, 8:39:51 AM10/22/12
to androidb...@googlegroups.com
Galera, to salvando no meu banco de dados "DATAS" no tipo Long.

Estou tentando verificar essas datas através de SQL porém estou com dificuldades em montar essa SQL.

Tentei o seguinte mas sem sucesso:

select strftime('%d/%m/%Y', [DATA_NPED]) from [NOVOPEDIDO]

Mas não me retorna corretamente. :( Alguém pode me dar uma luz?

--
Analista-Programador

Felipe Aron

unread,
Oct 22, 2012, 8:56:47 AM10/22/12
to androidb...@googlegroups.com
[RESOLVIDO]

Encontrei solução na web:

select date([ACERTOPREV_NPED]/1000, 'unixepoch')

Preciso dividir por 1000 o valor.

Carlos Alberto Pinto

unread,
Oct 22, 2012, 9:01:47 AM10/22/12
to androidb...@googlegroups.com
Eu preferi usar como TEXT, e recuperar usando a função date ou datetime tratando apos... Pois com Text em emegencia da para ate manipular no Banco.


date(timestring, modifier, modifier, ...) - retorna a data no formato YYYY-MM-DD.
time(timestring, modifier, modifier, ...) - retorna a hora no formato HH:MM:SS.
datetime(timestring, modifier, modifier, ...) - retorna data e hora no formato "YYYY-MM-DD HH:MM:SS".
julianday(timestring, modifier, modifier, ...) - retorna do dia Juliano.
strftime(format, timestring, modifier, modifier, ...) - retorna a data formatada de acordo com o formato especificado no primeiro argumento.

Carlos Alberto
Desenvolvedor Web/PHP/Vb.Net/C#
Iniciando projetos em Android/Java
Desenvolvedor Senior - CTIS
Alocado IBGE/GESIG/CODES






--
 
 

Felipe Aron

unread,
Oct 22, 2012, 9:11:05 AM10/22/12
to androidb...@googlegroups.com
Estava usando TEXT porém, percebi que usando LONG é mais prático pra manipulação (adição, subtração, etc).

No Android, criei uma "lib"/classe que manipula Datas, ai fica fácil.

--
 
 

Buiu

unread,
Oct 22, 2012, 10:32:47 AM10/22/12
to androidb...@googlegroups.com
Uma duvida, nada contra como está utilizando, mas pq não utiliza "DATETIME"?

Não atenderia?

--
 
 





Felipe Aron

unread,
Oct 22, 2012, 10:57:38 AM10/22/12
to androidb...@googlegroups.com

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

  • TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
  • REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
  • INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.
Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions. 

Maicon Strey

unread,
Oct 22, 2012, 11:19:22 AM10/22/12
to androidb...@googlegroups.com
Felipe. Tu está te apegando a detalhes.
O SQLite mascara um tipo data pra ajudar aos desenvolvedores mas armazena em numérico. pro desenvolvedor é transparente.

Ainda citando a documentação:

2.2 Affinity Name Examples

Example Typenames From The
CREATE TABLE Statement
or CAST Expression
Resulting AffinityRule Used To Determine Affinity
NUMERIC
DECIMAL(10,5)
BOOLEAN
DATE
DATETIME                            
NUMERIC        5                                            

Sendo assim, tu podes criar uma coluna DATETIME na tabela e manipular como se fosse data, mas internamente o SQLite vai armazenar um numérico.

Cito abaixo um exemplo de um script que eu utilizo e consigo manipular sem nenhum problema:
private static String dbSQL_Precos = "CREATE TABLE precos(" +
"produto_id BIGINT, " + 
"loja_id INT, " + 
"preco FLOAT , " + 
"dt_confirmacao DATETIME, " + 
"FOREIGN KEY(produto_id) REFERENCES produtos(produto_id), " +
"FOREIGN KEY(loja_id) REFERENCES lojas(loja_id)" +
"PRIMARY KEY(produto_id, loja_id) " +
");";

Abraço.

Maicon Strey

Novo Hamburgo - RS - Brasil
------------------
Linux user: #525086
Frase de todos os dias: "Se não mandar o log eu não ajudo!"



2012/10/22 Felipe Aron <felip...@gmail.com>
--
 
 

Felipe Aron

unread,
Oct 22, 2012, 11:24:30 AM10/22/12
to androidb...@googlegroups.com
Ahh sim, realmente amigo, me apeguei a detalhes.

Questão pra mim é usar os tipos primitivos do SQLite, prefiro assim (Text, Numeric, Integer, Real). Questão do DateTime, escolhi "INTEGER" por conta de ser mais fácil a manipulação e cálculos. 

Maicon Strey

unread,
Oct 22, 2012, 11:39:19 AM10/22/12
to androidb...@googlegroups.com
Ainda assim não vejo necessidade de usar tipos primitivos. inclusive já tivemos uma discussão aqui onde compartilhei uma classe que fiz só pra fazer cálculos com datas. da uma olhada aqui:

Não vejo motivo pra bater cabeça com tipos primitivos se já tem tudo pronto. Pra mim tu está tentando reinventar a roda.
2012/10/22 Felipe Aron <felip...@gmail.com>
--
 
 

Felipe Aron

unread,
Oct 22, 2012, 11:43:50 AM10/22/12
to androidb...@googlegroups.com
Mas a roda ta pronta, só to escolhendo o modelo... rs.

Exemplo simples seria: 

Data1 - Data2

Usando String por exemplo, eu teria de converter pro tipo Date() e ai fazer o cálculo.

Já usando Integer, bastaria fazer um menos o outro.

Não julgo nenhuma alternativa errada, apenas para o meu contexto, fica melhor o uso dos tipos primitivos.

Buiu

unread,
Oct 22, 2012, 11:51:35 AM10/22/12
to androidb...@googlegroups.com
perfeito, cada um usa o que fica e julga ser mais fácil, perguntei apenas por duvida mesmo... utilizo o DATETIME e é tao simples quanto utilizar um INTEGER... principalmente nas questões relacionadas a comando SQL. mas acredito que teria de fazer uma conversão a mais para obter novamente a date isso no Java. 

Mas valeu pela resposta.


--
 
 




Reply all
Reply to author
Forward
0 new messages