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


115

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

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


пример

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

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


Ответы:


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');"

Это отлично работает, потому что теперь я могу выбирать данные за определенные дни, просто используя формат даты «% d».
mjwrazor

выберите DATE_FORMAT (date, '% Y-% m-% d') из имени таблицы маленький «y» не возвращает год, используйте вместо него заглавную «Y»
Нирав Джоши

14

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

или

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


13

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

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


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

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

2020: Спасибо, дружище!
MarcoZen



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

ура


3

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

SELECT CURDATE();

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

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

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




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');

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


1

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

SELECT DATE(FROM_UNIXTIME(time)) from table 

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.