Как выбрать только дату из поля DATETIME в MySQL?

115

У меня есть таблица в базе данных MySQL, настроенная с помощью DATETIME. Мне нужно SELECTв этой таблице только по ДАТЕ и без учета времени.

Как мне войти SELECTв эту таблицу только по дате и минуя время, даже если для этого конкретного столбца установлено значение DATETIME?


пример

Теперь это: 2012-01-23 09:24:41

Мне нужно сделать SELECTтолько для этого:2012-01-23

DiegoP.
источник
возможный дубликат проблемы сравнения дат MySQL
Маркус Адамс,

Ответы:

165

SELECT DATE(ColumnName) FROM tablename;

Подробнее о функции MySQL DATE () .

Баласвами Ваддеман
источник
Я пытаюсь сделать это, но это не работает $ query = "SELECT * FROM Profiles WHERE date (DateReg = '". $ Date. "')";
ДиегоП.
2
date (datereg) = 'dateHere'
Баласвами Ваддеман
$ query = "ВЫБРАТЬ * ИЗ профилей WHERE date (DateReg) = '". $ date. "'"; Это должно работать. Убедитесь, что обе даты имеют один и тот же формат, если не форматируйте $ date перед использованием в предложении 'where ".
Клейн Дсилва,
Я думаю , вы должны быть осторожны с этим , потому что не будет использовать индекс по ColumnName
d0x
Не забудьте добавить знак ударения `перед и после имени столбца. В некоторых версиях MySql может отображаться текущая дата.
user2092317
40

вы можете использовать date_format

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

для часового пояса

sql2 = "SELECT DATE_FORMAT(CONVERT_TZ(CURDATE(),'US/Central','Asia/Karachi'),'%Y-%m-%d');"
Sushant Goel
источник
Это отлично работает, потому что теперь я могу выбирать данные за определенные дни, просто используя формат даты «% d».
mjwrazor
выберите DATE_FORMAT (date, '% Y-% m-% d') из имени таблицы маленький «y» не возвращает год, используйте вместо него заглавную «Y»
Нирав Джоши
14

Вы можете использовать select DATE(time) from appointment_detailsтолько дату

или

Вы можете использовать select TIME(time) from appointment_detailsтолько время

user1061865
источник
13

Попробуйте использовать
на сегодня:

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


на выбранную дату:

SELECT * FROM `tbl_name` where DATE(column_name) = DATE('2016-01-14')
Мохаммед Али
источник
2020: Спасибо, дружище!
MarcoZen
10

В MYSQL есть функция под названием DATE_FORMAT (дата, формат) . В вашем случае ваш оператор выбора будет таким: -

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

Для получения дополнительной информации о функциях Mysql DATE и TIME щелкните здесь.

Сантош Д.
источник
6

Просто вы можете сделать

SELECT DATE(date_field) AS date_field FROM table_name
Криш Ким
источник
6

Я пробовал сделать SELECT DATE(ColumnName), но это не работает для TIMESTAMPстолбцов †, потому что они хранятся в формате UTC, а дата в формате UTC используется вместо преобразования в местную дату. Мне нужно было выбрать строки, относящиеся к определенной дате в моем часовом поясе, поэтому, объединив мой ответ на этот другой вопрос с ответом Баласвами Ваддемана на этот вопрос , я сделал следующее:

Если вы храните даты как DATETIME

Просто сделать SELECT DATE(ColumnName)

Если вы храните даты как TIMESTAMP

Загрузите данные часового пояса в MySQL, если вы еще этого не сделали. Для серверов Windows см. Предыдущую ссылку. Для серверов Linux, FreeBSD, Solaris и OS X вы должны:

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

Затем отформатируйте свой запрос следующим образом:

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

Вы также можете поместить это в WHEREчасть запроса, подобную этой (но обратите внимание, что индексы в этом столбце не будут работать):

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

(Очевидно, замените America/New_Yorkваш местный часовой пояс.)


Единственным исключением является случай, если ваш часовой пояс - GMT, и вы не переходите на летнее время, потому что ваше местное время совпадает с UTC.

Майк
источник
3

Попробуйте, SELECT * FROM Profiles WHERE date(DateReg)=$dateгде $ date находится в гггг-мм-дд

альтернативно SELECT * FROM Profiles WHERE left(DateReg,10)=$date

ура

Richie
источник
3

Йо может попробовать это:

SELECT CURDATE();

Если вы проверите следующее:

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

Вы видите, что на это уходит много времени.

aymsoft
источник
2
Select * from table_name where date(datetime)
Гурприт Дханоа
источник
2

Пожалуйста, попробуйте этот ответ.

SELECT * FROM `Yourtable` WHERE date(`dateField`) = '2018-09-25'
Сай Чаран Цалла
источник
1

использование DATE_FORMAT

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

пример:

select DATE_FORMAT(`date_column`,'%d') from `database_name`.`table_name`;
Хендри Танака
источник
1
SELECT DATE_FORMAT(NOW() - INTERVAL FLOOR(RAND() * 14) DAY,'%Y-%m-%d');

Его можно использовать для получения даты в формате «гггг-мм-дд».

zaynomer
источник
1

если столбец времени находится на отметке времени, вы получите значение даты из этой отметки времени, используя этот запрос

SELECT DATE(FROM_UNIXTIME(time)) from table 
Rosmin
источник
0

В интересах реального решения этого вопроса:

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

Очевидно, вы можете изменить функцию NOW () на любую дату или переменную, какую захотите.

Mo'in Creemers
источник