yyyy una por obtener mes insertar funciones formato filtrar fechas fecha comparar año sql mysql database datetime

una - Crear fecha a partir de los campos de día, mes, año en MySQL



insertar fecha en mysql formato dd-mm-yyyy (5)

Cuando tenga valores enteros para el año, mes y día, puede hacer una FECHA DE FECHA combinando MAKEDATE () y DATE_ADD (). MAKEDATE () con un día constante de 1 le dará un DATETIME para el primer día del año dado, y luego puede agregarle el mes y el día con DATE_ADD ():

mysql> SELECT MAKEDATE(2013, 1); +-------------------+ | MAKEDATE(2013, 1) | +-------------------+ | 2013-01-01 | +-------------------+ mysql> SELECT DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH); +---------------------------------------------------+ | DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH) | +---------------------------------------------------+ | 2013-03-01 | +---------------------------------------------------+ mysql> SELECT DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY); | DATE_ADD(DATE_ADD(MAKEDATE(2013, 1), INTERVAL (3)-1 MONTH), INTERVAL (11)-1 DAY) | +----------------------------------------------------------------------------------+ | 2013-03-11 | +----------------------------------------------------------------------------------+

Así que para responder a la pregunta del OP:

SELECT * FROM `date` WHERE DATE_ADD(DATE_ADD(MAKEDATE(year, 1), INTERVAL (month)-1 MONTH), INTERVAL (day)-1 DAY) BETWEEN ''2013-01-01'' AND ''2014-01-01'';

Actualmente estoy desarrollando una aplicación que muestra documentos y permite a los miembros buscar estos documentos por diferentes parámetros, uno de ellos es el intervalo de fechas.

El problema que tengo es que el esquema de la base de datos no fue desarrollado por mí mismo y el creador de la base de datos ha creado una tabla de "fechas" con campos para "día", "mes", "año".

Me gustaría saber cómo puedo seleccionar un día, mes, año específico de la tabla y crear un objeto de fecha en SQL para poder comparar las fechas ingresadas por el usuario con BETWEEN.

A continuación se muestra la estructura de la tabla de fechas:

CREATE TABLE IF NOT EXISTS `date` ( `deposition_id` varchar(11) NOT NULL default '''', `day` int(2) default NULL, `month` int(2) default NULL, `year` int(4) default NULL, PRIMARY KEY (`deposition_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Intente usar CONCAT () y conviértalo en un campo y compare.

No estoy seguro de que pueda compararlo como fecha después de la concatenación.

Se puede comparar como entero.

concatine año mes día y haga un entero como este 20101017 y compare.

Ojalá :)


La forma más sencilla de hacer esto es:

DATE(CONCAT_WS(''-'', year, month, day))

LPAD no es necesario como lo señaló anteriormente @pbarney. Si está comparando con otro objeto de fecha, no es estrictamente necesario envolverlo con DATE ya que MySQL lo emitirá automáticamente:

some_date_field > CONCAT_WS(''-'', year, month, day)


Para construir una cadena de fecha clasificable a partir de eso, necesitará CONCAT para unir los bits y LPAD para asegurarse de que los campos de mes y día tengan dos dígitos. Algo como esto:

CONCAT(`year`,''-'',LPAD(`month`,2,''00''),''-'',LPAD(`day`,2,''00''))

Una vez que tengas eso, deberías poder usar BETWEEN , ya que estarán en un formato ordenable. Sin embargo, si aún necesita convertirlos en campos de fecha y hora reales, puede envolver todo en UNIX_TIMESTAMP() para obtener un valor de marca de hora.

Así que terminarías con algo como esto:

SELECT UNIX_TIMESTAMP(CONCAT(`year`,''-'',LPAD(`month`,2,''00''),''-'',LPAD(`day`,2,''00''))) as u_date WHERE u_date BETWEEN timestamp_1 and timestamp_2

Sin embargo, tenga en cuenta que esto será mucho más lento que si el campo fuera una simple marca de tiempo en primer lugar. Y definitivamente debe asegurarse de tener un índice en los campos de año, mes y día.