Wie wähle ich in MySQL nur das Datum aus einem DATETIME-Feld aus?

115

Ich habe eine Tabelle in der MySQL-Datenbank, die mit eingerichtet ist DATETIME. Ich muss SELECTin dieser Tabelle nur bis DATUM und ohne die Zeit.

Wie kann ich SELECTin dieser Tabelle nur das Datum und die Zeit umgehen, selbst wenn diese bestimmte Spalte auf gesetzt ist DATETIME?


Beispiel

Jetzt ist es: 2012-01-23 09:24:41

Ich muss SELECTnur dafür etwas tun :2012-01-23

DiegoP.
quelle
Mögliches Duplikat des MySQL-Datumsvergleichs
Marcus Adams

Antworten:

165

SELECT DATE(ColumnName) FROM tablename;

Mehr zur MySQL DATE () Funktion .

Balaswamy Vaddeman
quelle
Ich versuche dies zu tun, aber es funktioniert nicht $ query = "SELECT * FROM Profiles WHERE Datum (DateReg = '". $ Date. "')";
DiegoP.
2
date (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "SELECT * FROM Profiles WHERE Datum (DateReg) = '". $ Datum. "'"; Das sollte funktionieren. Stellen Sie sicher, dass beide Daten dasselbe Format haben. Wenn nicht, formatieren Sie das $ -Datum, bevor Sie es in der '
where'-
Ich denke, Sie müssen vorsichtig damit sein, weil es keinen Index für den ColumnName verwenden wird
d0x
Vergessen Sie nicht, das Grave-Akzent-Symbol vor und nach dem Spaltennamen einzufügen. In einigen MySQL-Versionen wird möglicherweise das aktuelle Datum angezeigt.
user2092317
40

Sie können date_format verwenden

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

für die Zeitzone

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
sushant goel
quelle
Dies funktioniert perfekt, da ich jetzt Daten von bestimmten Tagen auswählen kann, indem ich nur das Datumsformat '% d' habe.
mjwrazor
wählen DATE_FORMAT (Datum, '% Y-% m-% d') von Tabellennamen small "y" year Verwendung Kapital "Y" nicht statt Rückkehr
Nirav Joshi
14

Sie können select DATE(time) from appointment_detailsnur für Datum verwenden

oder

Sie können select TIME(time) from appointment_detailsnur für die Zeit verwenden

user1061865
quelle
13

Versuchen Sie
für heute zu verwenden:

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


für ausgewähltes Datum:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
quelle
2020: Danke Kumpel!
MarcoZen
10

In MYSQL haben wir die Funktion DATE_FORMAT (Datum, Format) . In Ihrem Fall wird Ihre select-Anweisung folgendermaßen aussehen: -

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

Weitere Informationen zu den MySQL-Funktionen DATE und TIME finden Sie hier.

Santosh D.
quelle
6

Einfach können Sie tun

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

Ich habe versucht, a auszuführen SELECT DATE(ColumnName), dies funktioniert jedoch nicht für TIMESTAMPSpalten †, da diese in UTC gespeichert sind und das UTC-Datum verwendet wird, anstatt in das lokale Datum zu konvertieren. Ich musste Zeilen auswählen, die sich an einem bestimmten Datum in meiner Zeitzone befanden. Um meine Antwort auf diese andere Frage mit der Antwort von Balaswamy Vaddeman auf diese Frage zu kombinieren, habe ich Folgendes getan:

Wenn Sie Daten als speichern DATETIME

Mach einfach SELECT DATE(ColumnName)

Wenn Sie Daten als speichern TIMESTAMP

Laden Sie die Zeitzonendaten in MySQL, falls Sie dies noch nicht getan haben. Für Windows-Server siehe den vorherigen Link. Für Linux-, FreeBSD-, Solaris- und OS X-Server würden Sie Folgendes tun:

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

Formatieren Sie dann Ihre Abfrage wie folgt:

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

Sie können dies auch in den WHERETeil der Abfrage wie folgt einfügen (beachten Sie jedoch, dass Indizes für diese Spalte nicht funktionieren):

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

(Ersetzen America/New_YorkSie offensichtlich Ihre lokale Zeitzone.)


Die einzige Ausnahme ist, wenn Ihre lokale Zeitzone GMT ist und Sie keine Sommerzeit machen, da Ihre Ortszeit mit UTC übereinstimmt.

Mike
quelle
3

Versuchen SELECT * FROM Profiles WHERE date(DateReg)=$date wo $ date in JJJJ-MM-TT ist

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

Prost

Richie
quelle
3

Sie können dies versuchen:

SELECT CURDATE();

Wenn Sie Folgendes überprüfen:

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

Sie können sehen, dass es lange dauert.

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

Bitte versuchen Sie diese Antwort.

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

Verwenden DATE_FORMAT

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

Beispiel:

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

Dieser kann verwendet werden, um das Datum im Format 'JJJJ-MM-TT' abzurufen.

zaynomer
quelle
1

Wenn sich die Zeitspalte im Zeitstempel befindet, erhalten Sie mit dieser Abfrage einen Datumswert aus diesem Zeitstempel

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

Im Interesse einer funktionierenden Lösung für diese Frage:

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

Natürlich können Sie die Funktion NOW () in ein beliebiges Datum oder eine beliebige Variable ändern.

Mo'in Creemers
quelle