252

我想将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');news1

电子邮件 2;姓名 2;新闻 2

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

4

11 回答 11

459
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
于 2012-09-27T20:59:00.497 回答
90

只是得到一个日期,你cast可以

cast(user.registration as date)

并获得特定的格式使用date_format

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

SQLFiddle 演示

于 2012-02-12T18:48:23.550 回答
74

在 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)
于 2014-02-18T00:06:55.593 回答
22

如果该registration字段确实是类型TIMESTAMP,您应该可以这样做:

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

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

于 2012-02-12T19:03:36.887 回答
12

只需使用 mysql 的 DATE 函数:

mysql> select DATE(mytimestamp) from foo;
于 2016-02-03T01:02:50.017 回答
8

你应该转换timestampdate.

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

FROM_UNIXTIME

于 2018-02-28T05:54:57.197 回答
6

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

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

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

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

于 2019-08-16T09:30:21.377 回答
3

如果您在输出中获取查询,则需要向我们展示实际回显结果的代码。你能发布调用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

如果查询抛出错误,这将停止任何错误抑制。

于 2012-02-12T20:01:04.017 回答
3

我使用此处所述的“日期”功能进行了操作:

(SELECT count(*) as the-counts,(date(timestamp)) as the-timestamps FROM `user_data` WHERE 1 group BY the-timestamps)
于 2018-04-24T12:03:36.633 回答
2

如果要更改列的数据类型,只需先将 from 转换TIMESTAMPINT

ALTER TABLE table_name MODIFY column_name INT;

然后INTDATE

ALTER TABLE table_name MODIFY column_name DATE;

但是,如果您不是要更改列,而只想选择 SELECT,那么您可以使用 date() 函数:

SELECT date(your_timestamp_column) FROM your_table;
于 2021-10-10T09:29:10.250 回答
1

尝试:

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

它将以毫秒为单位将时间戳格式化为 yyyy-mm-dd 字符串。

于 2016-02-04T14:13:48.340 回答