¿Cómo seleccionar solo la fecha de un campo DATETIME en MySQL?

115

Tengo una tabla en la base de datos MySQL que está configurada con DATETIME. Necesito estar SELECTen esta tabla solo por FECHA y excluyendo la hora.

¿Cómo hago SELECTen esta tabla solo con la fecha y sin pasar por la hora, incluso si esa columna específica está configurada en DATETIME?


Ejemplo

Ahora es: 2012-01-23 09:24:41

Necesito hacer un SELECTsolo para esto:2012-01-23

DiegoP.
fuente
posible duplicado del problema de comparación de fechas
Marcus Adams

Respuestas:

165

SELECT DATE(ColumnName) FROM tablename;

Más sobre la función DATE () de MySQL .

Balaswamy Vaddeman
fuente
Estoy tratando de hacer esto pero no funciona $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.
2
date (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; Esto debería funcionar. Asegúrese de que ambas fechas tengan el mismo formato. Si no, formatee la fecha $ antes de usar en la cláusula "where".
Clain Dsilva
Creo que debe tener cuidado con eso porque no usará un índice en ColumnName
d0x
No olvide agregar el símbolo de acento grave `antes y después del nombre de la columna. En alguna versión de MySql, puede mostrar la fecha actual.
user2092317
40

puedes usar date_format

select DATE_FORMAT(date,'%y-%m-%d') from tablename

para la zona horaria

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
sushant goel
fuente
Esto funciona perfectamente porque ahora puedo seleccionar datos de ciertos días con solo tener el formato de fecha '% d'.
mjwrazor
seleccione DATE_FORMAT (fecha, '% Y-% m-% d') del nombre de la tabla, la pequeña "y" no devuelve el año, use la mayúscula "Y" en su lugar
Nirav Joshi
14

Puedes usar select DATE(time) from appointment_detailssolo para la fecha

o

Puedes usar select TIME(time) from appointment_detailssolo por tiempo

usuario1061865
fuente
13

Intente usar
para hoy:

SELECT * FROM `tbl_name` where DATE(column_name) = CURDATE()


para la fecha seleccionada:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
fuente
2020: ¡Gracias amigo!
MarcoZen
10

En MYSQL tenemos una función llamada DATE_FORMAT (fecha, formato) . En su caso, su declaración de selección será así: -

SELECT DATE_FORMAT(dateTimeFieldName,"%a%m%Y") as dateFieldName FROM table_name

Para obtener más información sobre las funciones FECHA y HORA de Mysql, haga clic aquí.

Santosh D.
fuente
6

Simplemente puedes hacer

SELECT DATE(date_field) AS date_field FROM table_name
krish kim
fuente
6

Intenté hacer una SELECT DATE(ColumnName), sin embargo, esto no funciona para las TIMESTAMPcolumnas porque están almacenadas en UTC y se usa la fecha UTC en lugar de convertir a la fecha local. Necesitaba seleccionar filas que estaban en una fecha específica en mi zona horaria, por lo que combinando mi respuesta a esta otra pregunta con la respuesta de Balaswamy Vaddeman a esta pregunta , esto es lo que hice:

Si está almacenando fechas como DATETIME

Solo haz SELECT DATE(ColumnName)

Si está almacenando fechas como TIMESTAMP

Cargue los datos de la zona horaria en MySQL si aún no lo ha hecho. Para servidores Windows, consulte el enlace anterior. Para servidores Linux, FreeBSD, Solaris y OS X, haría lo siguiente:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Luego formatee su consulta de esta manera:

SELECT DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York'))

También puede poner esto en la WHEREparte de la consulta como esta (pero tenga en cuenta que los índices en esa columna no funcionarán):

SELECT * FROM tableName
WHERE DATE(CONVERT_TZ(`ColumnName`, 'UTC', 'America/New_York')) >= '2015-02-04'

(Obviamente, sustituya America/New_Yorkpor su zona horaria local).


La única excepción a esto es si su zona horaria local es GMT y no tiene horario de verano porque su hora local es la misma que UTC.

Miguel
fuente
3

Prueba SELECT * FROM Profiles WHERE date(DateReg)=$datedónde está $ fecha en aaaa-mm-dd

Alternativamente SELECT * FROM Profiles WHERE left(DateReg,10)=$date

Salud

Richie
fuente
3

Puedes probar esto:

SELECT CURDATE();

Si marca lo siguiente:

SELECT NOW(); SELECT DATE(NOW()); SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');

Puedes ver que lleva mucho tiempo.

aymsoft
fuente
2
Select * from table_name where date(datetime)
Gurpreet Dhanoa
fuente
2

Pruebe esta respuesta.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'
Sai Charan Tsalla
fuente
1

Utilizar DATE_FORMAT

select DATE_FORMAT(date,'%d') from tablename =>Date only

ejemplo:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;
Hendry Tanaka
fuente
1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

Este se puede usar para obtener la fecha en formato 'aaaa-mm-dd'.

zaynomer
fuente
1

si la columna de tiempo está en la marca de tiempo, obtendrá el valor de fecha de esa marca de tiempo usando esta consulta

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
fuente
0

Con el interés de poner realmente una solución funcional a esta pregunta:

SELECT ... WHERE `myDateColumn` >= DATE(DATE_FORMAT(NOW(),'%Y-%m-%d'));

Obviamente, puede cambiar la función NOW () a cualquier fecha o variable que desee.

Mo'in Creemers
fuente