假如我们有一个从CURRENT_TIMESTAMP-1小时开始的计时器,我们可以简朴地计较出时差并返回3600秒.
可是,假如我们但愿计时器仅在一天的特按时刻计数,而只说事变日或指定日期事变,该怎么办?查察下面的代码以查察“建设”语句,以更好地领略
CREATE TABLE `timer` (
`Id` BIGINT NOT NULL AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL,`startAt` DATETIME NOT NULL,`startTime` TIME DEFAULT NULL,`endTime` TIME DEFAULT NULL,`monday` BOOLEAN DEFAULT 1,`tuesday` BOOLEAN DEFAULT 1,`wednesday` BOOLEAN DEFAULT 1,`thursday` BOOLEAN DEFAULT 1,`friday` BOOLEAN DEFAULT 1,`saturday` BOOLEAN DEFAULT 1,`sunday` BOOLEAN DEFAULT 1,`dateReg` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT 'Timer';
留意:startime和endtime暗示从两个日期开始计较秒数时计时器将思量的小时数.如上所述的计时器没有竣事时刻,这意味着它将永久不会遏制
此刻有人说可以在查询中完成,而且确定它们是正确的,可是我小我私人以为,在存储函数中它将变得越发轻易和更好:
CREATE FUNCTION `TIMEPASSED`(iId BIGINT(100)) RETURNS BIGINT(20)
BEGIN
DECLARE sTime TIME;
DECLARE eTime TIME;
DECLARE startAt DATETIME;
#Get the Results from the Database and put them into the variables
SELECT timer.startTime,timer.endTime,timer.startAt INTO sTime,eTime,startAt FROM tickets
WHERE timer.Id = iId;
#if the start time is null then return the difference between the reset time and now
IF sTime IS NULL
THEN RETURN (UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(startAt));
END IF;
RETURN NULL;
END
假如startTime为NULL,则上述函数仅返回计时器启动后颠末的完备秒数.
此刻让我们举办插入查询
INSERT INTO timer VALUES(NULL,'mytimer',CURRENT_TIMESTAMP,09:00,18:00,1,CURRENT_TIMESTAMP);
上面的查询提议计时器从CURRENT_TIME开始,仅在09:00和18:00之间计时,仅在礼拜一至礼拜五事变.
SELECT查询(此处的“排序依据”很重要)
SELECT *,TIMEPASSED(Id) as passed FROM timer ORDER BY passed DESC
总的来说:我想知道在输入的时刻分派的时刻内颠末的秒数
对这个科目标任何基本数学的阅读城市很谢谢.那我可以办理
感激:D
最佳谜底
假如我领略正确,那么我以为在存储进程中行使的一个好的算法是:
>从零开始计数. >假如本日是与dateReg沟通的日期,而且礼拜几是正确的,则将最大(startTime,dateReg的时刻)-min(endTime,当前时刻)添加到计数中. >不然,假如本日在dateReg日期之后:
>假如dateReg的对应礼拜几为true,而且dateReg的时刻在endTime之前,则将其添加到提醒符max(startTime,dateReg的时刻)-endTime. >假如本日的礼拜几是正确的,而且当前时刻在startTime之后,则将计数添加到tally startTime-min(endTime,当前时刻)中.
>存储endTime-成天中的startTime. >假如monday为true,则计较dateReg的日期与当前日期(不包罗在内)之间的礼拜一数.*将该数字乘以wholeDay到计数中.对一周的每一天一再一次. >返回理货.
*这自己就是另一个题目.一种要领是计较dateReg的周之后和当前周之前的完备周数,假如dateReg的DoW(一周中的某天)之后的天在所接头的DoW之前,则加1,假如当前DoW的前一天在该DoW之后.
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|