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


187

我想将timestampMySQL中的A 转换为日期。

我想将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');新闻1

email2; name2; news2

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


它保存文件完全一样吗?您用于运行sql查询的代码是什么?
seanbreeden'2

1
我编辑了问题,requeteSQL正在运行查询
remyremy 2012年

Answers:


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

2
作为MySQL的23年6月5日,我发现价值FROM_UNIXTIME()应直接输入:即DATE_FORMAT(FROM_UNIXTIME(user.registration), '%E%B%Y')AS 'date_formatted'
JESii

SELECT * FROM users WHERE DATE_FORMAT(FROM_UNIXTIME(usersuser_created_at),'%Y-%b-%e')='2015-03-06'这是正确的格式还是我应该修改它?
Dheeraj Thedijje

2
@DheerajThedijje显示为2018年11月6日。您可能正在寻找要用PHP '%Y-%m-%d'对其进行格式设置的格式(date('Y-m-d',$row->user_created_at))-这(变体,SQL和PHP)都显示为2018-11-06
Chris

如果你想以这种方式添加的时间“HH:MM:SS”,这增加了格式字符串“%H:%I:%s”的
luis.ap.uyen

63

在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演示


它给出的结果相同,显示cast(user.registration as date)而不是字段的值
remyremy 2012年

5
尽管有效-Cast(from_unixtime(user.registration)AS date)
Eric Ness

我有它对我
有用的

使用“ 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 ";

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


我尝试过但是得到了相同的结果:显示DATE(user.registration)而不是字段的值
remyremy 2012年

正如有人建议的那样,您能够直接使用mysql客户端成功运行查询吗?我还没有听说过requeteSQL函数,它到底是做什么的?
cs0lar 2012年

不幸的是,我无法直接使用mysql客户端,我没有自己的服务器...我提供了requeteSQL,基本上它只是运行查询并测试是否有错误以发送电子邮件...
remyremy 2012年

2
实际上,我意识到我的字段是BIGINT类型而不是TIMESTAMP。只有内容是时间戳(1328649722),所以这就是它不起作用的原因。现在,FROM_UNIXTIME一切都很好!
remyremy 2012年

我使用datetime进行了这项工作,因为我只需要获取日期部分即可。
ericsicons 2015年

10

只需使用mysql的DATE函数:

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

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字符串。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.