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


Converting a column to timestamp or datetime and querying the latest within a time interval

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

我现在有两件事很困惑,

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

2)我想从数据库中查询一个时间戳值,该值是使用上面的

列在某个时间范围内最高的。

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

如果我的问题是模糊的,请原谅我的问题,但是我没有找到很多与我的问题相关的东西。我确信这将得到一些反对的投票,所以请友好。

几件事…首先查看这里了解更多关于日期格式的信息。以datetime格式插入当前日期

第二,您可能应该更新表,将/更改为-。

使用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

start和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)是的,那是真的。Date需要设置为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)