Jak wybrać tylko datę z pola DATETIME w MySQL?

115

Mam tabelę w bazie danych MySQL, która jest skonfigurowana z DATETIME. Muszę znaleźć się SELECTw tej tabeli tylko do DATA i z wyłączeniem czasu.

Jak mam SELECTw tej tabeli tylko datę i pomijanie czasu, nawet jeśli ta konkretna kolumna jest ustawiona na DATETIME?


Przykład

Teraz jest: 2012-01-23 09:24:41

Muszę zrobić SELECTtylko w tym celu:2012-01-23

DiegoP.
źródło
możliwy duplikat problemu z porównaniem dat MySQL
Marcus Adams

Odpowiedzi:

165

SELECT DATE(ColumnName) FROM tablename;

Więcej o funkcji MySQL DATE () .

Balaswamy Vaddeman
źródło
Próbuję to zrobić, ale to nie działa $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
DiegoP.
2
date (datereg) = 'dateHere'
Balaswamy Vaddeman
$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; To powinno działać. Upewnij się, że obie daty mają ten sam format. Jeśli nie, sformatuj datę $ przed użyciem klauzuli „in”.
Clain Dsilva,
Myślę, że musisz być ostrożny, ponieważ nie użyje indeksu w ColumnName
d0x
Nie zapomnij dodać symbolu akcentu Grave `przed i po nazwie kolumny. W niektórych wersjach MySql może pokazywać aktualną datę.
user2092317
40

możesz użyć date_format

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

dla strefy czasowej

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
sushant goel
źródło
Działa to doskonale, ponieważ teraz mogę wybrać dane z określonych dni, mając po prostu format daty „% d”.
mjwrazor
wybierz DATE_FORMAT (data, '% Y-% m-% d') z nazwy tabeli małe "y" nie zwraca roku zamiast tego użyj dużej litery "Y"
Nirav Joshi
14

Możesz używać select DATE(time) from appointment_detailstylko na randkę

lub

Możesz używać select TIME(time) from appointment_detailstylko na czas

user1061865
źródło
13

Spróbuj użyć
na dziś:

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


na wybrany termin:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Mohammed Aly
źródło
2020: Dzięki kolego!
MarcoZen
10

W MYSQL mamy funkcję DATE_FORMAT (data, format) . W twoim przypadku wybrane zestawienie będzie wyglądać następująco: -

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

Aby uzyskać więcej informacji o funkcjach MYSQL DATA i CZAS, kliknij tutaj.

Santosh D.
źródło
6

Po prostu możesz to zrobić

SELECT DATE(date_field) AS date_field FROM table_name
krish kim
źródło
6

Próbowałem zrobić SELECT DATE(ColumnName), ale to nie działa w przypadku TIMESTAMPkolumn †, ponieważ są one przechowywane w UTC, a data UTC jest używana zamiast konwertowania na datę lokalną. Musiałem wybrać wiersze, które były w określonym dniu w mojej strefie czasowej, więc łącząc moją odpowiedź na to drugie pytanie z odpowiedzią Balaswamy Vaddeman na to pytanie , oto co zrobiłem:

Jeśli przechowujesz daty jako DATETIME

Po prostu zrób SELECT DATE(ColumnName)

Jeśli przechowujesz daty jako TIMESTAMP

Załaduj dane strefy czasowej do MySQL, jeśli jeszcze tego nie zrobiłeś. W przypadku serwerów Windows zobacz poprzednie łącze. W przypadku serwerów Linux, FreeBSD, Solaris i OS X należy:

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

Następnie sformatuj zapytanie w ten sposób:

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

Możesz również umieścić to w WHEREczęści zapytania takiej jak ta (ale pamiętaj, że indeksy w tej kolumnie nie będą działać):

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

(Oczywiście należy zastąpić America/New_Yorklokalną strefę czasową).


Jedynym wyjątkiem jest sytuacja, gdy lokalna strefa czasowa to GMT i nie robisz czasu letniego, ponieważ Twój czas lokalny jest taki sam jak UTC.

Mikrofon
źródło
3

Spróbuj, SELECT * FROM Profiles WHERE date(DateReg)=$dategdzie $ data jest w rrrr-mm-dd

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

Twoje zdrowie

Richie
źródło
3

Możesz spróbować tego:

SELECT CURDATE();

Jeśli sprawdzisz następujące kwestie:

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

Widać, że zajmuje to dużo czasu.

aymsoft
źródło
2
Select * from table_name where date(datetime)
Gurpreet Dhanoa
źródło
2

Spróbuj tej odpowiedzi.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'
Sai Charan Tsalla
źródło
1

Posługiwać się DATE_FORMAT

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

przykład:

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

Można go użyć do pobrania daty w formacie „rrrr-mm-dd”.

zaynomer
źródło
1

jeśli kolumna czasu znajduje się na znaczniku czasu, za pomocą tego zapytania otrzymasz wartość daty z tego znacznika czasu

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
źródło
0

W celu właściwego rozwiązania tego pytania:

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

Oczywiście możesz zmienić funkcję NOW () na dowolną datę lub zmienną.

Mo'in Creemers
źródło