Преобразование метки времени в дату в запросе 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; имя2; news2

Как я могу преобразовать это поле в дату?

remyremy
источник
Как сохранить файл? Какой код вы используете для запуска SQL-запроса?
seanbreeden
1
Я отредактировал свой вопрос, запрос выполняется по
RequeteSQL

Ответы:

373
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
Yatin
источник
2
Начиная с MySQL 5.6.23, я обнаружил, что значение FROM_UNIXTIME () следует вводить напрямую: т.е. DATE_FORMAT (FROM_UNIXTIME (user.registration), "% e% b% Y") AS "date_formatted"
JESii
SELECT * FROM пользователей WHERE 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
Крис С.
Если вы хотите добавить время таким способом «чч: мм: сс», добавьте это в строку формата «% 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 demo

Юрген д
источник
Это дает тот же результат, вместо значения поля отображается приведение (user.registration как date)
remyremy
5
Хотя это сработало - приведение (from_unixtime (user.registration) AS date)
Эрик Несс
У меня есть конкретный формат даты, чтобы он работал на меня, насколько это возможно, спасибо
Sabre Tabatabaee Yazdi
используйте «as DATETIME», чтобы получить также часы, минуты и секунды
Enrique
Я думаю, что этот ответ является кратким и ясным решением. Я предпочитаю это.
Роман Матвеев
18

Если registrationполе действительно имеет тип, TIMESTAMPвы можете просто:

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

и регистрация должна отображаться как гггг-мм-дд

cs0lar
источник
Я пытался, но получаю тот же результат: вместо значения поля отображается DATE (user.registration)
remyremy
Как кто-то предложил, вы можете успешно выполнить запрос с помощью клиента MySQL? Я не слышал о функции RequeteSQL, что именно она делает?
cs0lar
К сожалению, я не могу использовать клиент MySQL напрямую, у меня нет собственного сервера ... Я предоставил RequeteSQL, в основном он просто запускает запрос и проверяет, нет ли ошибки при отправке электронной почты ...
remyremy
2
На самом деле я понял, что мое поле имеет тип BIGINT, а не TIMESTAMP. Только содержание было меткой времени (1328649722), поэтому оно не работало. Теперь все хорошо с FROM_UNIXTIME!
remyremy
Эта работа отлично, я попробовал это с datetime, так как мне нужно было только получить часть даты.
ericsicons
10

Просто используйте функцию DATE mysql:

mysql> select DATE(mytimestamp) from foo;
Мори
источник
5
SELECT DATE(UNIX_TIMESTAMP())плюет NULLв мой MySQL 5.7.14
Xenos
попробуйте DATE (CURRENT_TIMESTAMP ())
Morey
7

Вы должны преобразовать timestampв date.

select FROM_UNIXTIME(user.registration, '%Y-%m-%d %H:%i:%s') AS 'date_formatted'

FROM_UNIXTIME

Джейди Мор
источник
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... но это больше не нужно

d.raev
источник
1

Пытаться:

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

Он отформатирует метку времени в миллисекундах в строку гггг-мм-дд.

Виталий А
источник