【问题标题】:Convert time to MySQL Time将时间转换为 MySQL 时间
【发布时间】:2010-11-07 01:38:29
【问题描述】:

我正在尝试存储一周的日程安排(例如星期一、上午 9 点到下午 5 点等)。我不需要存储日期;我只需要保存以下内容:一天,不时,不时。

所以,假设我有以下时间值:

  • 下午 1:20
  • 1320
  • 上午 8:00

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

另外,我如何查询这样的内容:查找每周一下午 2 点到 3 点之间营业的每家商店?我是否只是做类似的事情: WHERE day = 1 AND from_time >= 2pm AND to_time

【问题讨论】:

    标签: php sql mysql datetime time


    【解决方案1】:

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

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

    ……反之……

    SELECT UNIX_TIMESTAMP(the_date) FROM table;

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

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

    【讨论】:

    • 不过,我没有 Unix 时间戳。我有 3 条信息:日期(星期)、时间(字符串,如“1:30pm”)和时间(又是字符串)。我误解了您提出的答案吗?
    • 你可以将它们作为字符串存储在 MySQL 中,并在每次你想对它们进行 datediff 时解析它们,或者你可以将它们存储为绝对时间戳并丢弃所有不需要的数据显示它们时从它们中提取,使您能够使用 MySQL 函数并根据它们的值进行查询。如果您不知道该怎么做,听起来像是访问 php.net 是为了让您熟悉可用的日期和时间功能。
    • 我不应该尝试在 MySQL 中做这些事情吗?例如,如果我有这样的查询,“查找每个星期一下午 2 点到 3 点之间营业的商店”——那些存储的值(如果按原样存储)对于此类查询将毫无用处。
    【解决方案2】:

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

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

    WHERE TIME_TO_SEC(column) = 123
    

    ...因为它会呈现一个索引,如果列上存在索引,则无用 - 确保进行表扫描(执行最差的选项)。

    【讨论】:

      【解决方案3】:

      MySQL 理解 ISO 8601 日期格式,因此您必须以“08:00:00”的形式给出上午 8: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 2013-09-27
        • 1970-01-01
        • 2011-12-18
        • 2011-01-05
        • 2010-11-07
        • 2014-08-26
        • 2011-07-05
        相关资源
        最近更新 更多