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

我想将MySQL中的timestamp转换为日期。

我想格式化用户。将注册字段作为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(用户。登记,' % d / Y % m / % '); news1

email2; name2 news2

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

617419 次浏览

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

cast(user.registration as date)

并使用date_format来获得特定的格式

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

< a href = " http://sqlfiddle.com/ !9/fc4bd/1" rel="noreferrer">SQLFiddle demo .

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

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

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

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

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

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

在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)

只需使用mysql的DATE函数:

mysql> select DATE(mytimestamp) from foo;

试一试:

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

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

你应该将timestamp转换为date

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

FROM_UNIXTIME

我用在这里中描述的'date'函数来实现:

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

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

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

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

旧的解决方案是获取初始日期对象并用第二个函数DATE_FORMAT…但这已经没有必要了

如果你想改变列的数据类型,你可以简单地先从TIMESTAMP转换为INT:

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;

我想转换一个记录1580707260

通常,我使用在线时间戳转换器

想要在查询结果中显示它

请试试这个

DATE_FORMAT(FROM_UNIXTIME(field name from table), '%e %b %Y')

AS '显示结果的名称'