Come selezionare solo la data da un campo DATETIME in MySQL?


115

Ho una tabella nel database MySQL impostata con DATETIME. Ho bisogno di SELECTin questa tabella solo entro DATE ed escluso l'orario.

Come faccio SELECTa inserire in questa tabella solo la data e ignorare l'ora, anche se quella colonna specifica è impostata su DATETIME?


Esempio

Ora è: 2012-01-23 09:24:41

Devo fare SELECTsolo per questo:2012-01-23


Risposte:


165

SELECT DATE(ColumnName) FROM tablename;

Maggiori informazioni sulla funzione MySQL DATE () .


Sto provando a farlo ma non funziona $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.

2
date (datereg) = 'dateHere'
Balaswamy Vaddeman,

$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; Questo dovrebbe funzionare. Assicurati che entrambe le date abbiano lo stesso formato,
altrimenti

Penso che tu debba stare attento con questo perché non utilizzerà un indice su ColumnName
d0x

Non dimenticare di aggiungere il simbolo dell'accento Grave `prima e dopo il nome della colonna. In alcune versioni di MySql potrebbe mostrare la data corrente.
user2092317

40

puoi usare date_format

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

per il fuso orario

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"

Funziona perfettamente perché ora posso selezionare i dati di determinati giorni semplicemente con il formato della data '% d'.
mjwrazor

seleziona DATE_FORMAT (data, '% Y-% m-% d') da tablename piccola "y" non restituisce l'anno usa la maiuscola "Y" invece
Nirav Joshi,

14

Puoi usare select DATE(time) from appointment_detailssolo per la data

o

Puoi usare select TIME(time) from appointment_detailssolo per il tempo


13

Prova ad usare
per oggi:

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


per la data selezionata:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')

2020: Grazie amico!
MarcoZen

10

In MYSQL abbiamo una funzione chiamata DATE_FORMAT (data, formato) . Nel tuo caso la tua dichiarazione di selezione diventerà così: -

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

Per ulteriori informazioni sulle funzioni DATA e ORA di Mysql fare clic qui.


6

Semplicemente puoi farlo

SELECT DATE(date_field) AS date_field FROM table_name

6

Ho provato a fare a SELECT DATE(ColumnName), tuttavia questo non funziona per le TIMESTAMPcolonne perché sono memorizzate in UTC e la data UTC viene utilizzata invece di convertire nella data locale. Avevo bisogno di selezionare le righe che si trovavano in una data specifica nel mio fuso orario, quindi combinando la mia risposta a quest'altra domanda con la risposta di Balaswamy Vaddeman a questa domanda , questo è quello che ho fatto:

Se stai memorizzando le date come DATETIME

Basta fare SELECT DATE(ColumnName)

Se stai memorizzando le date come TIMESTAMP

Carica i dati del fuso orario in MySQL se non l'hai già fatto. Per i server Windows vedere il collegamento precedente. Per i server Linux, FreeBSD, Solaris e OS X dovresti:

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

Quindi formatta la tua query in questo modo:

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

Puoi anche inserirlo nella WHEREparte della query in questo modo (ma nota che gli indici su quella colonna non funzioneranno):

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

(Ovviamente sostituisci il America/New_Yorktuo fuso orario locale.)


L'unica eccezione è se il fuso orario locale è GMT e non si utilizza l'ora legale perché l'ora locale è la stessa dell'UTC.


3

Prova SELECT * FROM Profiles WHERE date(DateReg)=$datedove $ date è in aaaa-mm-gg

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

Saluti


3

Puoi provare questo:

SELECT CURDATE();

Se controlli quanto segue:

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

Puoi vedere che ci vuole molto tempo.



2

Per favore prova questa risposta.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'

1

Uso DATE_FORMAT

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

esempio:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;

1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

Questo può essere utilizzato per ottenere la data nel formato "aaaa-mm-gg".


1

se la colonna dell'ora è sul timestamp, otterrai il valore della data da quel timestamp utilizzando questa query

SELECT DATE(FROM_UNIXTIME(time)) from table 

0

Nell'interesse di mettere effettivamente una soluzione funzionante a questa domanda:

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

Ovviamente, puoi modificare la funzione NOW () in qualsiasi data o variabile desideri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.