将列转换为时间戳或日期时间,并在一个时间间隔内查询最新值

时间:2014-05-19 18:54:17

标签: php mysql datetime

我有一个从csv转储的数据库,其中我有一个使用VARCHAR导入的列名time_stamp

我现在有两件事我很困惑,

1)我希望能够将此列转换为时间戳或日期时间  它的当前格式是dd / mm / yyyy H:M:S但是我读到unix只接受 - 而不是 / 。这是真的?

2)我想使用上面的列从数据库中查询某个时间范围内最高的时间戳值

示例:在上午7点到上午8点之间,它应该给我一个最接近上午8点的时间戳

如果我的问题含糊不清,原谅我的问题,但我找不到与我的问题有多大关系。我相信这会得到一些投票,所以请善待。

2 个答案:

答案 0 :(得分:0)

很少的东西..首先看这里看看有关日期格式的更多信息。 Insert current date in datetime format mySQL

第二,您应该更新表格以将/更改为 - 。

使用STR_TO_DATE()转换

获取最新日期,然后执行此操作

SELECT MIN(date) FROM table -- // MIN() is used to get the most recent timestamp
WHERE STR_TO_DATE(date, '%c/%e/%Y %r') BETWEEN $start AND $end

开始和结束将是您的开始和结束日期


如果您只想查看当天的使用时间:

SELECT MIN(date) FROM table -- // MIN() is used to get the most recent timestamp
WHERE TIME(STR_TO_DATE(date, '%c/%e/%Y %r')) BETWEEN $start AND $end

按照我之前的建议,您应该像这样更新表格。

UPDATE table
SET date = STR_TO_DATE(date, '%c/%e/%Y %r')

类似的东西来修复它...这将使你的查询不那么复杂:)

答案 1 :(得分:0)

1)是的,这是真的。日期需要为YYYY-mm-dd H:M:S。 (你可以在php中转换它,然后执行insert (date("Y-m-d H:i:s",strtotime($your_date))))

2)

SELECT * FROM table 
WHERE HOUR(date) BETWEEN 'start_date' AND 'end_date'
GROUP BY DAY(date)
ORDER BY DAY(date)