将时间转换为MySQL时间

时间:2010-11-07 01:38:30

标签: php sql mysql datetime time

我正在尝试存储一周的时间表(例如,周一,上午9点至下午5点等)。我没有必要存储日期;我只需要保存以下内容:日期,时间,时间。

所以,说我有以下时间值:

  • 下午1点二十
  • 1320
  • 上午8:00

假设这些值是实际有效时间,我如何将这些字符串转换为MySQL时间类型?我该怎么做呢? (我正在使用PHP。)

此外,我如何查询这样的事情:找到周一下午2点到3点之间开放的每家商店?我只是做了类似的事情:WHERE day = 1 AND from_time> = 2pm AND to_time< = 3pm(当然,将'2pm'和'3pm'更改为他们的转换值)?或者是否有一些更适合此类查询的MySQL函数?

3 个答案:

答案 0 :(得分:1)

MySQL内置了将unix时间戳转换为MySQL日期:

INSERT INTO table (the_date) VALUES (FROM_UNIXTIME(your_timestamp));

......反过来......

SELECT UNIX_TIMESTAMP(the_date) FROM table;

您可以使用DAY()条件中的DAYOFWEEK()WHERE函数将MySQL时间戳转换为相关单位,以便您进行查询。

您可能需要对模式进行一些操作以确定最佳结构,以便您在此处获得所需的功能。例如。将日期存储在日期时间字段中可能没有意义。

答案 1 :(得分:0)

MySQL了解ISO 8601日期格式,因此您必须在上午8:00以“08:00:00”的形式提供时间。

您可以在WHERE子句中使用具有有效ISO 8601时间的字符串。

http://en.wikipedia.org/wiki/ISO_8601

http://dev.mysql.com/doc/refman/5.1/en/time.html

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

答案 2 :(得分:0)

MySQL有一个TIME data type - 它会以hh:mi:ss格式存储值,您可以使用TIME_FORMAT function将演示文稿更改为您想要的。

尽量不要依赖应用于列的函数进行比较 - IE:

WHERE TIME_TO_SEC(column) = 123

...因为如果列上存在索引,它将呈现索引,无用 - 确保表扫描(性能最差的选项)。