我知道这可以在后端完成 - 但我想知道是否有任何原生的或有效的MySQL函数可用于检查给定的time
变量是否在两个time
覆盖的范围内{1}}变量(start_time
和end_time
)。
我目前设置了一个数据库,如下所示;
+----+--------+------------+----------+
| id | job_id | start_time | end_time |
+----+--------+------------+----------+
| 1 | 40 | 13:00:00 | 14:00:00 |
| 2 | 44 | 14:45:00 | 15:00:00 |
| 3 | 45 | 15:10:00 | 15:30:00 |
+----+--------+------------+----------+
后端接受start_time
和end_time
job_id
- 然后它会查看它是否适合任何地方。因此,例如,如果start_time为13:30:00
,end_time为13:45:00
,则后端应拒绝此作业请求,因为没有时间可用(它将与{{1处的条目重叠) }}。)
但是,如果提交的作业的开始时间为id 1
,结束时间为14:10:00
,则应接受该作业,因为这与任何现有任务都不重叠。
以下查询非常适合判断作业是否可以提交,例如,13:00:00至14:00:00(与id 1完全相同);
14:20:00
但是如果start_time变为13:01:00,则查询会下降 - 因为start_time小于13:01:00,时间为13:00:00。因此,它将被批准插入,因为上述查询将不会返回重叠结果。
如果我们将查询更改为SELECT * WHERE start_time >= '13:00:00' AND end_time <= '14:00:00';
上的OR
子句,那么任何未在14:00:00之前结束的作业都将被拒绝。
任何人都可以提出一种简单的方法来获取end_time
类型的输入变量,并检查它是否属于所有可用time
和start_time
变量的范围,如db以上?
答案 0 :(得分:0)
假设您的新工作开始时为new_start
且new_end
结束。假设您现有的列表按每个作业条目的时间顺序排列,并且它们都不重叠。
您需要检查以查看新作业是否适合列表而不重叠:
new_end
小于第一个列表条目的start_time
在哪种情况下新条目适合开头,或者new_start
是
大于最后一个列表条目的end_time
,在这种情况下
新条目最后适用,或者new_start
大于end_time
且new_end
小于
以下列表条目的start_time
,在这种情况下是新的
条目适合此条目和下一条目。答案 1 :(得分:-1)
我建议您通过以下方式之一办理登机手续:小时/分钟/秒
toReturn = ""
for definition in definitionArray:
lastFunctionalLabel = ""
toPrint = ""
for dtTag in definition.findall("dt"):
if dtTag.tail == "obsolete":
dtTag.tail = "" #take away the tail word so that when printing it does not show up.
if IGNORE_ARCHAIC:
continue
# We don't really care for 'verbal illustrations' or 'usage notes', even though they are occasionally useful.
for usageNote in dtTag.findall("un"):
dtTag.remove(usageNote)
for verbalIllustration in dtTag.findall("vi"):
dtTag.remove(verbalIllustration)
# Directional cross reference doesn't make sense for us
for dxTag in dtTag.findall("dx"):
for dxtTag in dxTag.findall("dxt"):
for dxnTag in dxtTag.findall("dxn"):
dxtTag.remove(dxnTag)
toPrint = ET.tostring(dtTag, "", "xml").strip() # extract raw XML from <dt>...</dt>
toPrint = toPrint.replace("<sx>", "; ") # attempt to remove 'synonymous cross reference tag' and replace with semicolon
toPrint = toPrint.replace("<dx>", "; ") # attempt to remove 'Directional cross reference tag' and replace with semicolon
toPrint = re.sub('<[^>]*>', '', toPrint) # remove all other XML tags
toPrint = re.sub(':', '', toPrint) # remove all colons, since they are usually useless and have been replaced with semicolons above
toPrint = toPrint.replace(" ; ", "; ").strip() # erase space between semicolon and previous word, if exists, and strip any extraneous whitespace
toPrint += "<br>\n"
或使用BETWEEN功能
SELECT * FROM timetableTemp
WHERE HOUR(TIMEDIFF(start_time, end_time))>=1
AND start_time >=start_time
支持:
SELECT * FROM timetableTemp
WHERE '13:00:00' BETWEEN start_time AND end_time