小时范围存储为单列中的文本 - 过滤

时间:2015-12-23 08:28:26

标签: mysql

我正在开发一个旧项目,很久以前我决定将开放时间作为文本存储在数据库中。例如:

CREATE TABLE `places` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `place_name` varchar(100) NOT NULL,
  `monday` varchar(11) DEFAULT NULL,
  `tuesday` varchar(11) DEFAULT NULL,
  `wednesday` varchar(11) DEFAULT NULL,
  `thursday` varchar(11) DEFAULT NULL,
  `friday` varchar(11) DEFAULT NULL,
  `saturday` varchar(11) DEFAULT NULL,
  `sunday` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

到目前为止一切都很好,因为这些数据仅用于提供信息。星期一到星期日列内的值正在被过滤,因此它们必须严格匹配模式:HH:MM-HH:MM,例如“08:00-17:30”,而NULL值表示该地点已关闭在特定的一天。

但是,现在需要按开放时间过滤地点。像“显示现在开放的地方”之类的东西。我可以,我已经准备好了,查询将使用SUBSTR和STR_TO_DATE函数来分割开放时间,但我不确定这是否会破坏我的数据库。我期待大约100'000行,原始表格更“复杂”......)......这只是一个例子。

工作(还)SQL:

SET @currentTime := '16:00:00';

SELECT * 
FROM `places` 
WHERE `monday` IS NOT NULL 
AND STR_TO_DATE(SUBSTR(`monday`, 1, 5), '%H:%i') <= @currentTime 
AND STR_TO_DATE(SUBSTR(`monday`, 7, 5), '%H:%i') >= @currentTime

你怎么看?有没有更好的方法来使用现有的DB结构,或者我应该忘记这样的一半措施并立即改变结构?

0 个答案:

没有答案