English 中文(简体)
比较MySQL“时间”领域与PHP的力量
原标题:Compare MySQL "Time" Field with String in PHP
  • 时间:2009-10-18 17:30:50
  •  标签:

我的数据库有一行,有以下信息:

    data:

     user_id     start_time        end_time
       405        12:00:00         14:00:00

我发言如下:

       SELECT *
         FROM data
         INNER join users on users.user_id = data.user_id
          WHERE NOT EXISTS 
           (SELECT * FROM data 
            WHERE  10:00:00  BETWEEN start_time AND end_time)
            GROUP BY users.usrID");

现在,我认为,这一询问会回到上述一行(用户405),但不会让任何人返回。 (每10:00至12:00之间。)

有趣的是,如果我把价值10:00改为07:00:00,那就行了罚款。

任何关于为何不这样做的想法? 在数据库中,我设立了“技术监评”领域,并重新编排格式:00:00:00。

非常感谢!

我改变了我对此事的问候:

SELECT usrID, 
       first, 
       last
  FROM users
 WHERE user_id NOT IN (SELECT u.user_id
                         FROM `data` d, 
                              `users` u
                        WHERE d.user_id = u.user_id 
                          AND CAST( 10:00:00  AS TIME) BETWEEN start_time AND end_time)
ORDER BY u.user_id

似乎就这样了。 感谢一切帮助。

最佳回答

Try:

  SELECT *
    FROM DATA d
    JOIN USERS u ON u.user_id = d.user_id
   WHERE NOT EXISTS (SELECT NULL 
                       FROM DATA t
                      WHERE t.id = d.id
                        AND CONVERT( 10:00:00 , TIME) BETWEEN t.start_time AND t.end_time)
GROUP BY u.usrID

当你得到BETWEEN的恰当评价时,你注意到,你在座标上贴上了子号——仅仅因为他们重上了同一个桌子,这并不意味着这两个问题相互关联。

问题回答

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between”rel=“nofollow noreferer”>。

“为了在使用BETWEEN时取得最佳效果,你应利用CAST(CAST)将数值明确转换为预期数据类型。 实例: 如果你将DATETIME与两个DATE数值相比较,将DATE数值转换为DATETIME值。 如果你使用像2001-1这样的固定不变,则与国名相比,将座标引到国名。

Try:

SELECT *
FROM data
    INNER join users on users.user_id = data.user_id
WHERE NOT EXISTS 
    (
     SELECT * 
     FROM   data 
     WHERE  CAST( 10:00:00  AS TIME) BETWEEN start_time AND end_time
    )
GROUP BY users.usrID

如果不进行明确的分类,MySQL可能会将时间价值转换成显示字面以供比较,而不是将直面字面转换为时间价值。

我认为,所发生的事情是,把10:00的时间看作是一个扼杀,而不是一个时间。 这将解释为何07:00:00得出不同结果。 1. 给付价值...... 我认为,这同:

cast( 10:00:00  as time)




相关问题
热门标签