Як вибрати лише дату з поля DATETIME в MySQL?


115

У мене є таблиця в базі даних MySQL, яка створена DATETIME. Мені потрібно SELECTв цю таблицю лише до DATE і виключати час.

Як мені 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'
Balaswamy Vaddeman

$ query = "SELECT * FROM Profiles WHERE date (DateReg) = '". $ date. "'"; Це має спрацювати. Переконайтесь, що обидві дати мають однаковий формат, якщо не форматувати дату $ до використання в пункті «де».
Заява Dsilva

Я думаю, що вам потрібно бути обережними з цим, оскільки він не буде використовувати індекс на ColumnName
d0x

Не забудьте додати символ "Могильний наголос" перед і після назви стовпця. У деяких версіях MySql може відображатися поточна дата.
користувач2092317

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 (дата, '% Y-% m-% d') з назви таблиці невеликий "y" не повертає рік, використовуйте капітал "Y" замість цього
Nirav Joshi

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

Я спробував зробити a 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 у yyyy-mm-dd

Як варіант 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');

Цей може бути використаний для отримання дати у форматі "yyyy-mm-dd".


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.