【问题标题】:Only set time of timestamp in select statement仅在 select 语句中设置时间戳的时间
【发布时间】:2012-12-26 13:01:30
【问题描述】:

我有一个应用程序,用户可以在其中定义他的工作时间:例如从早上 8 点到下午 5 点。在我的 MySQL 数据库中,我有两个时间戳字段。如何只设置时间而不设置日期?我需要这个,因为只有时间很重要。我只想知道用户从什么时候到什么时候工作。日期本身无关紧要。

我尝试过这样的事情,但我的数据库拒绝了它:

0000-00-00 08:00:00

这是我的选择语句:

# check if there is already an appointment, if yes, return it
select * 
from ios_appointments a join ios_workinghours h using(workerid_fk)
where workerid_fk = 1
AND h.start <= '08:30:00' AND h.end >= '10:00:00'
AND (
    a.start BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
    OR  a.end   BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
    OR (a.start < '2012-12-24 08:30:00' AND a.end > '2012-12-24 10:00:00')
)

【问题讨论】:

    标签: php mysql sql timestamp


    【解决方案1】:

    不要使用 MySQL 的 TIMESTAMP 数据类型;改用TIME

    MySQL 以'HH:MM:SS' 格式检索和显示TIME 值(或'HHH:MM:SS' 格式用于大小时值)。 TIME 值的范围可以从 '-838:59:59''838:59:59'。小时部分可能很大,因为TIME 类型不仅可以用来表示一天中的某个时间(必须小于 24 小时),还可以用来表示经过的时间或两个事件之间的时间间隔(可能很多大于 24 小时,甚至是负数)。

    因此:

    ALTER TABLE ios_workinghours
      MODIFY start TIME,
      MODIFY end   TIME
    

    【讨论】:

    • 正是我一直在寻找的!我不知道 TIME 数据类型存在。谢谢。
    【解决方案2】:

    不确定这是否是您的要求,但您可以使用 DATE_FORMAT

    select * 
      from ios_appointments a join ios_workinghours h using(workerid_fk)
      where workerid_fk = 1
            AND DATE_FORMAT(h.start , '%H:%i:%s') <= '08:30:00' AND DATE_FORMAT(h.end , '%H:%i:%s') >= '10:00:00'
            AND (
              a.start BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
              OR  a.end   BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
              OR (a.start < '2012-12-24 08:30:00' AND a.end > '2012-12-24 10:00:00')
            )
    

    【讨论】:

      【解决方案3】:

      试试这个它会解决你的问题-

      select * 
      from ios_appointments a join ios_workinghours h using(workerid_fk)
      where workerid_fk = 1
      AND date_format( h.start, "%h:%i:%s")  <= '08:30:00' AND date_format( h.end, "%h:%i:%s") >= '10:00:00'
      AND (
          a.start BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
          OR  a.end   BETWEEN '2012-12-24 08:30:00'  AND  '2012-12-24 10:00:00'
          OR (a.start < '2012-12-24 08:30:00' AND a.end > '2012-12-24 10:00:00')
      )
      

      【讨论】:

        【解决方案4】:

        使用CURTIME() 在表中插入当前时间。

        以 'HH:MM:SS' 或 HHMMSS.uuuuuu 中的值返回当前时间 格式,取决于函数是在字符串中使用还是 数字上下文。该值以当前时区表示。

        另外,你可以refer

        【讨论】:

        • 好吧,我不需要当前时间,虽然格式是正确的。我需要能够以 CURTIME() 格式在数据库中保存特定时间。
        • 但是,在您的问题中,您说您无法节省时间。
        猜你喜欢
        • 1970-01-01
        • 2015-04-24
        • 2015-04-13
        • 1970-01-01
        • 2012-04-04
        • 2012-12-06
        • 1970-01-01
        • 2020-11-28
        • 1970-01-01
        相关资源
        最近更新 更多