É possível em um banco de dados sqlite criar uma tabela que tenha uma coluna de carimbo de data / hora padrão para isso DATETIME('now')
?
Como isso:
CREATE TABLE test (
id INTEGER PRIMARY KEY AUTOINCREMENT,
t TIMESTAMP DEFAULT DATETIME('now')
);
Isso dá um erro ... Como resolver?
de acordo com o dr. hipp em uma postagem recente na lista:
fonte
CURRENT_TIMESTAMP
criei minha própria função em C para retornar o número de microssegundos desde a época, e estou feliz por poder usá-laDEFAULT
agora.É apenas um erro de sintaxe, você precisa de parênteses:
(DATETIME('now'))
Se você olhar para a documentação , notará os parênteses adicionados em torno da opção 'expr' na sintaxe.
fonte
Este é um exemplo completo com base nas outras respostas e comentários à pergunta. No exemplo, o registro de data e hora (
created_at
-coluna) é salvo como fuso horário UTC da época unix e convertido em fuso horário local somente quando necessário.O uso da época unix economiza espaço de armazenamento - número inteiro de 4 bytes vs. sequência de 24 bytes quando armazenado como sequência ISO8601, consulte tipos de dados . Se 4 bytes não forem suficientes, podem ser aumentados para 6 ou 8 bytes.
Salvar o carimbo de data e hora no fuso horário UTC torna conveniente mostrar um valor razoável em vários fusos horários.
A versão SQLite é a 3.8.6 que vem com o Ubuntu LTS 14.04.
A hora local está correta, pois estou localizado no UTC + 2 DST no momento da consulta.
fonte
Pode ser melhor usar o tipo REAL, para economizar espaço de armazenamento.
Citação da seção 1.2 de Tipos de dados no SQLite versão 3
consulte restrição de coluna .
E insira uma linha sem fornecer nenhum valor.
fonte
integer(n)
onde se pode escolher o valor adequadon
.É um erro de sintaxe porque você não escreveu parênteses
se você escrever
(data e hora ('agora', 'hora local'))
fonte
Este exemplo alternativo armazena a hora local como Inteiro para salvar os 20 bytes. O trabalho é realizado no campo padrão, gatilho de atualização e exibição. O strftime deve usar '% s' (aspas simples) porque "% s" (aspas duplas) gerou um erro 'Não constante' em mim.
fonte