Перетворіть дату часу в запит MySQL


188

Я хочу перетворити timestampв MySQL дату.

Я б хотів відформатувати поле user.registration у текстовий файл у вигляді yyyy-mm-dd.

Ось мій SQL:

$sql = requestSQL("SELECT user.email, 
                   info.name, 
                   FROM_UNIXTIME(user.registration),
                   info.news
                   FROM user, info 
                   WHERE user.id = info.id ", "export members");

Я також спробував перетворення дат із:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)

Я повторюю результат перед тим, як написати текстовий файл, і я отримаю:

email1; name1; DATE_FORMAT (user.registration, '% d /% m /% Y'); news1

email2; name2; news2

Як я можу перетворити це поле на сьогоднішній день?


Його збереження файлу саме так? Який код ви використовуєте для запуску запиту sql?
seanbreeden

1
Я відредагував своє запитання, requeteSQL виконує запит
remyremy

Відповіді:


373
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'

2
Станом на MySQL 5.6.23, я вважаю, що значення FROM_UNIXTIME () слід вводити безпосередньо: тобто DATE_FORMAT (FROM_UNIXTIME (user.registration), '% e% b% Y') AS 'date_formatted'
JESii

ВИБІР * ВІД користувачів, ДЕ DATE_FORMAT (FROM_UNIXTIME ( users. user_created_at), '% Y-% b-% e') = '2015-03-06' це правильний формат чи мені слід це змінити?
Dheeraj Thedijje

2
@DheerajThedijje відображається як 2018 -6 листопада. Ви можете шукати, '%Y-%m-%d'як би відформатували його в PHP (date('Y-m-d',$row->user_created_at))- це (обидва варіанти, SQL та PHP) відображається як 2018-11-06
Chris S.

Якщо ви хочете додати час таким чином "hh: mm: ss", додайте це до рядка формату "% H:% i:% s"
luis.ap.uyen

64

Перетворити дату часу в MYSQL

Складіть таблицю з цілою часовою позначкою:

mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)

Вставте деякі значення

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)

Поглянь

mysql> select * from foo;
+------+-------------+
| id   | mytimestamp |
+------+-------------+
|    1 |  1381262848 |
+------+-------------+
1 row in set (0.00 sec)

Перетворити номер у часову позначку:

mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id   | from_unixtime(mytimestamp) |
+------+----------------------------+
|    1 | 2013-10-08 16:07:28        |
+------+----------------------------+
1 row in set (0.00 sec)

Перетворити його у читабельний формат:

mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id   | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
|    1 | 2013 8th October 04:07:28                       |
+------+-------------------------------------------------+
1 row in set (0.00 sec)

виправте% h до% H
Tomot

61

Для того, щоб просто отримати дату ви можете castйого

cast(user.registration as date)

і отримати певний формат використання date_format

date_format(registration, '%Y-%m-%d')

Демонстрація SQLFiddle


Це дає той самий результат, замість значення поля відображається команда (user.registration як дата)
remyremy

5
Це працювало, хоча - лита (from_unixtime (user.registration) AS date)
Eric Ness

у мене є конкретний формат дати, який його працював для мене якнайкраще спасибі
saber tabatabaee yazdi

використовуйте "як DATETIME", щоб отримати також години і секунди
Енріке

Я думаю, що ця відповідь є коротким і зрозумілим рішенням. Я вважаю за краще це.
Роман Матвєєв

18

Якщо registrationполе справді є типовим, TIMESTAMPви можете просто зробити:

$sql = "SELECT user.email, 
           info.name, 
           DATE(user.registration), 
           info.news
      FROM user, 
           info 
     WHERE user.id = info.id ";

і реєстрація повинна відображатися як yyyy-mm-dd


Я спробував, але отримую той самий результат: DATE (user.registration) відображається замість значення поля
remyremy

як хтось запропонував, чи можете ви успішно запустити запит, використовуючи клієнт mysql безпосередньо? Я не чув про функцію requeteSQL, що саме це робить?
cs0lar

На жаль, я не в змозі безпосередньо користуватися клієнтом mysql, у мене немає власного сервера ... Я надав requeteSQL, в основному це просто запустити запит і перевірити, якщо помилка надсилає електронні листи ...
remyremy

2
Насправді я зрозумів, що моє поле - тип BIGINT, а не TIMESTAMP. Тільки вміст був часовою позначкою (1328649722), тому це не працювало. Тепер все добре з FROM_UNIXTIME!
remyremy

Це добре працює, я спробував це з датою, оскільки мені потрібно було отримати лише частину дати.
ericsicons

10

Просто використовуйте функцію DATE mysql:

mysql> select DATE(mytimestamp) from foo;

5
SELECT DATE(UNIX_TIMESTAMP())плює NULLв мій MySQL 5.7.14
Xenos

спробуйте DATE (CURRENT_TIMESTAMP ())
Морей


2

Якщо ви отримуєте запит у своєму висновку, вам потрібно показати нам код, який насправді відповідає результату. Чи можете ви опублікувати код, який викликає requeteSQL?

Наприклад, якщо ви використовували одиничні лапки в php, він буде друкувати ім'я змінної, а не значення

echo 'foo is $foo'; // foo is $foo

Це звучить точно як ваша проблема, і я впевнений, що це причина.

Також спробуйте видалити символ @, щоб побачити, чи це допомагає, надаючи більше інформації.

так що

$SQL_result = @mysql_query($SQL_requete); // run the query

стає

  $SQL_result = mysql_query($SQL_requete); // run the query

Це зупинить будь-яке придушення помилок, якщо запит видає помилку.


2

Я зробив це за допомогою функції «дата», як описано тут :

(SELECT count(*) as the-counts,(date(timestamp)) as the-timestamps FROM `user_data` WHERE 1 group BY the-timestamps)

2

FROM_UNIXTIME(unix_timestamp, [format]) це все, що вам потрібно

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'

FROM_UNIXTIMEотримує значення числа і перетворює його на DATEоб'єкт,
або якщо йому задано рядок формату, він повертає його як рядок.

Старішим рішенням було отримати об'єкт початкової дати та відформатувати його за допомогою другої функції DATE_FORMAT... але це вже не потрібно


1

Спробуйте:

SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name

Він буде форматувати часову позначку в мілісекундах в рядок yyyy-mm-dd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.