2010-11-07 165 views
0

我试图存储一周的时间表(例如星期一,上午9点至下午5点等)。我不需要存储日期;我只需要保存以下内容:从时间到时间。将时间转换为MySQL时间

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

  • 下午1:20
  • 8:00 AM

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

另外,我该如何查询类似这样的内容:查找每周二在下午2点到3点之间开放的每家商店?我只是做一些事情:WHERE day = 1 AND from_time> = 2pm AND_time < = 3pm(当然,改变'2pm'和'3pm',无论它们的转换值是什么)?还是有一些MySQL函数更适合这种查询?

回答

0

MySQL有一个TIME data type - 它将值存储在HH:MI:SS格式,你可以使用TIME_FORMAT function改变呈现给你然而我喜欢。

尽量不要依靠应用于列作比较的功能 - IE:

WHERE TIME_TO_SEC(column) = 123 

...因为它会呈现一个指数,如果一个列上存在的,没用的 - 确保表扫描(表现最差的选项)。

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时间戳转换为相关单位,供您进行查询。

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

+0

虽然我没有Unix时间戳。我有3条信息:日期(星期),时间(字符串,如“1:30 pm”)和时间(又是一个字符串)。我误解了你提出的答案吗? – StackOverflowNewbie 2010-11-07 02:26:44

+0

你可以将它们作为字符串存储在MySQL中,并在每次你想对它们进行日期处理时解析它们,或者你可以将它们存储为绝对时间戳,并在显示它们时丢弃它们不需要的所有数据,使您能够使用MySQL函数和基于其值的查询。如果你不知道如何去做,这听起来像是一次php.net旅程,目的是为了让你熟悉可用的日期和时间函数。 – coreyward 2010-11-07 02:47:33

+0

我不应该试图在MySQL中做这个东西吗?例如,如果我有查询,“找到每个星期一在下午2点到3点之间开放的商店” - 那些存储的值(如果按原样存储)对于此类查询将毫无用处。 – StackOverflowNewbie 2010-11-07 04:32:35