在MySQL查询中将时间戳转换为日期

rem*_*emy 170 mysql sql date-formatting

我想将timestampMySQL转换为日期.

我想将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");
Run Code Online (Sandbox Code Playgroud)

我还试过日期转换:

DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)
Run Code Online (Sandbox Code Playgroud)

我在编写文本文件之前回显结果,然后得到:

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

EMAIL2; NAME2;新闻2

如何将该字段转换为日期?

小智 337

DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
Run Code Online (Sandbox Code Playgroud)

  • 从 MySQL 5.6.23 开始,我发现应该直接输入 FROM_UNIXTIME() 的值:即 DATE_FORMAT(FROM_UNIXTIME(user.registration), '%e %b %Y') AS 'date_formatted' (2认同)
  • SELECT * FROM users WHERE DATE_FORMAT(FROM_UNIXTIME(`users`.`user_created_at`),'%Y-%b-%e') = '2015-03-06' 这是正确的格式还是我应该修改它? (2认同)
  • @DheerajThedijje 这显示为 2018-Nov-6。您可能正在寻找 `'%Y-%m-%d'`,因为您会在 PHP `(date('Ym-d',$row->user_created_at))` 中对其进行格式化 - 这个(两种变体,SQL和 PHP) 显示为 2018-11-06 (2认同)
  • 如果您想以这种方式添加时间“hh:mm:ss”,请将其添加到格式字符串“%H:%i:%s”中 (2认同)

Eri*_*ski 59

在MYSQL中将时间戳转换为日期

使用整数时间戳创建表:

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

插入一些值

mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

看一看

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

将数字转换为时间戳:

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)
Run Code Online (Sandbox Code Playgroud)

将其转换为可读格式:

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)
Run Code Online (Sandbox Code Playgroud)


jue*_*n d 57

刚刚得到一个日期,你可以cast

cast(user.registration as date)
Run Code Online (Sandbox Code Playgroud)

并获得特定的格式使用 date_format

date_format(registration, '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

SQLFiddle演示

  • 这虽然工作 - cast(from_unixtime(user.registration)AS date) (5认同)
  • 使用“as DATETIME”也可以获取小时、分钟和秒 (2认同)

小智 18

如果该registration字段确实是类型,TIMESTAMP您应该能够做到:

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

并且注册应显示为yyyy-mm-dd

  • 实际上我意识到我的字段是BIGINT类型而不是TIMESTAMP.只有内容是时间戳(1328649722),所以这就是为什么它不起作用.现在FROM_UNIXTIME的一切都很好! (2认同)

Mor*_*rey 10

只需使用mysql的DATE函数:

mysql> select DATE(mytimestamp) from foo;
Run Code Online (Sandbox Code Playgroud)

  • `SELECT DATE(UNIX_TIMESTAMP())`在MySQL 5.7.14中吐出`NULL` (4认同)

Jay*_*Mor 7

你应该转换timestampdate.

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

FROM_UNIXTIME


d.r*_*aev 5

FROM_UNIXTIME(unix_timestamp, [format]) 是你所需要的全部

FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'
Run Code Online (Sandbox Code Playgroud)

FROM_UNIXTIME获取数字值并将其转换为DATE对象,
或者如果给定格式字符串,则将其作为字符串返回。

较旧的解决方案是获取初始日期对象并使用第二个函数对其进行格式化DATE_FORMAT......但这不再是必要的