2009-09-11 21 views

Respuesta

8

Intentar esta consulta:

SELECT * FROM mytable 
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday) 
4

SQLite tiene muy poco apoyo para el almacenamiento de fechas. Puede utilizar el método sugerido por Nick D anterior, pero tenga en cuenta que esta consulta dará como resultado un escaneo completo de la tabla dado que las fechas no están indexadas correctamente en SQLite (en realidad, SQLite no admite las fechas como un tipo incorporado).

Si realmente desea hacer una consulta rápida, tendrá que agregar una columna separada (integral) para almacenar el día del nacimiento (1-31) y adjuntar un índice para la misma en la base de datos.

Si solo quiere comparar las fechas, puede agregar una sola columna (INTEGER) que almacenará el valor de la fecha UTC (pero este truco no le permitirá buscar componentes de fechas individuales fácilmente).

buena suerte

+2

FECHA o DATETIME se almacenarán como NUMÉRICOS (consulte "2.2 Ejemplos de nombres de afinidad" en http://www.sqlite.org/datatype3.html) como unix time (consulte la sección "1.2 Date y Time Datatype"). Almacenar el día y el mes es una posible optimización, el almacenamiento de otra columna INTEGER es redundante. – idbrii

5

Tener un tipo especial de fecha y hora siempre ha parecido como una sobrecarga innecesaria para mí, son números enteros rápido, flexible, y utilizar menos espacio.

Para los valores generales de fecha y hora, utilice las marcas de tiempo de Unix Epoch. Fácil de usar, extremadamente flexible, así como agnóstico de la zona horaria (¡e incluso del calendario!). (Recientemente escribí an article on using them, which I really have to plug...)

Dicho esto, si solo está interesado en las fechas en el calendario gregoriano, puede usar un número entero grande en el siguiente formato: AAAAMMDD, por ejemplo, 19761203. Para su uso particular, podría incluso crea un entero de cuatro dígitos como MMDD, digamos 1703 —, ¡que tiene que dar como resultado selecciones rápidas!

+0

Parece que SQLite puede almacenar fechas como tiempo Unix: http://www.sqlite.org/datatype3.html (Consulte "1.2 Fecha y hora de tipo de datos"). Entonces no hay espacio desperdiciado allí. – idbrii

+2

En cuanto a almacenar su fecha como un entero como AAAMMDD, ¿qué pasa con los cumpleaños que tienen fechas? ¿Qué hay de los cumpleaños en el mismo mes? Se necesitan muchas operaciones mod/div para extraer cada fragmento de fecha. Me parece que sería mejor utilizar las herramientas integradas (y optimizadas y legibles) de la base de datos, como la respuesta de NickD. – idbrii

Cuestiones relacionadas