to_char - sqlite datetime type
¿Cómo funcionan los valores DATETIME en SQLite? (5)
Estoy creando aplicaciones de Android y necesito guardar la fecha / hora del registro de creación. Los documentos de SQLite dicen, sin embargo, "SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y / o tiempos" y es "capaz de almacenar fechas y horas como valores de TEXTO, REALES o INTEGER".
¿Hay alguna razón técnica para usar un tipo sobre otro? ¿Y puede una sola columna almacenar fechas en cualquiera de los tres formatos de una fila a otra?
Tendré que comparar las fechas más tarde. Por ejemplo, en mis aplicaciones, mostraré todos los registros que se crean entre la fecha A y la fecha B. Me preocupa que el hecho de no tener una verdadera columna DATETIME podría dificultar las comparaciones.
SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y / o tiempos. En cambio, las Funciones de fecha y hora integradas de SQLite son capaces de almacenar fechas y horas como valores de TEXTO, REALES o INTEGER:
TEXTO como cadenas ISO8601 ("AAAA-MM-DD HH: MM: SS.SSS"). REAL como números de día julianos, el número de días desde el mediodía en Greenwich el 24 de noviembre de 4714 aC según el calendario gregoriano proléptico. INTEGER como Tiempo Unix, el número de segundos desde 1970-01-01 00:00:00 UTC. Las aplicaciones pueden elegir almacenar fechas y horas en cualquiera de estos formatos y convertir libremente entre formatos usando las funciones incorporadas de fecha y hora.
Habiendo dicho eso, usaría INTEGER y almacenaría los segundos desde la época de Unix (1970-01-01 00:00:00 UTC).
Guárdelo en un campo de tipo long
. Ver Date.getTime()
y new Date(long)
Para prácticamente todos los asuntos de fecha y hora, prefiero simplificar las cosas, muy, muy simple ... Abajo los segundos almacenados en números enteros.
Los enteros siempre serán compatibles como enteros en bases de datos, archivos planos, etc. Haces un poco de matemática y lo conviertes en otro tipo y puedes formatear la fecha como quieras.
Al hacerlo de esta manera, no tiene que preocuparse cuando [inserte la base de datos favorita actual aquí] se reemplaza por [futura base de datos favorita] que casualmente no usó el formato de fecha que eligió hoy.
Es solo un poco sobrecarga matemática (por ejemplo, métodos: toma dos segundos, publicaré una idea si es necesario) y simplifica las cosas para muchas operaciones relacionadas con la fecha / hora posterior.
Una de las potentes funciones de SQLite le permite elegir el tipo de almacenamiento. Ventajas / desventajas de cada una de las tres posibilidades diferentes:
Cadena ISO8601
- La comparación de cadenas da resultados válidos
- Almacena fracción de segundos, hasta tres dígitos decimales
- Necesita más espacio de almacenamiento
- Verá directamente su valor cuando use un navegador de base de datos
- Necesidad de analizar para otros usos
- El modificador de columna "current_timestamp default" almacenará usando este formato
Número Real
- Alta precisión con respecto a fracciones de segundos
- Mayor rango de tiempo
Número entero
- Menor espacio de almacenamiento
- Operaciones rápidas
- Pequeño rango de tiempo
- Posible problema del año 2038
Si necesita comparar diferentes tipos o exportar a una aplicación externa, puede usar las funciones de conversión de fecha y hora de SQLite según sea necesario.
SQlite no tiene un tipo de fecha y hora específico. Puede usar los tipos TEXT
, REAL
o INTEGER
, según sus necesidades.
Directamente desde el DOCS
SQLite no tiene una clase de almacenamiento reservada para almacenar fechas y / o tiempos. En cambio, las Funciones de fecha y hora integradas de SQLite son capaces de almacenar fechas y horas como valores de TEXTO, REALES o INTEGER:
- TEXTO como cadenas ISO8601 ("AAAA-MM-DD HH: MM: SS.SSS").
- REAL como números de día julianos, el número de días desde el mediodía en Greenwich el 24 de noviembre de 4714 aC según el calendario gregoriano proléptico.
- INTEGER como Tiempo Unix, el número de segundos desde 1970-01-01 00:00:00 UTC.
Las aplicaciones pueden elegir almacenar fechas y horas en cualquiera de estos formatos y convertir libremente entre formatos usando las funciones incorporadas de fecha y hora.
Las funciones de fecha y hora integradas de SQLite se pueden encontrar aquí .