Who*_*res 6 mysql trigger stored-procedures datetime date
我有触发器和一个存储过程(所以 SP 在触发器运行时运行)。我需要一个函数来找到下一个星期六放入 SP。
所以让我们说,今天是星期三(2015-7-22)。如果我的触发器今天运行,其中的 SP 必须找到下一个星期六 (2015-7-25)。
另外,即使是星期六,但时间早于晚上 9.30,它也必须找到当天。晚上 9.30 之后,它必须在下周六返回。
我想把我的整个触发器和 sp 放在这里,但我不想在这里拥挤。我只需要想法,谢谢。
编辑:
感谢 oNaye,我编写了以下代码:
CREATE DEFINER=`root`@`localhost` PROCEDURE `newGuess`(
IN `muserID` INT,
IN `numm1` INT,
IN `numm2` INT,
IN `numm3` INT,
IN `numm4` INT,
IN `numm5` INT,
IN `numm6` INT)
begin
set @today = (select weekday(curdate())+1); /*monday is the first day in here*/
if @today<6 or @today=7 then /*it is NOT saturday*/
set @nextSaturday = (SELECT DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,(6-WEEKDAY(NOW())),(5-WEEKDAY(NOW()))) DAY));
end if;
if @today = 6 then /* it is saturday */
set @current_time = (select curtime());
set @nextSaturday = (SELECT DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,(6-WEEKDAY(NOW())),(5-WEEKDAY(NOW()))) DAY));
if @current_time < CAST('21:30:00' AS time) then
set @nextSaturday = curdate();
end if;
if @current_time >=CAST('21:30:00' AS time) then
set @nextSaturday = curdate()+INTERVAL 1 WEEK;
end if;
end if;
insert into guessesTBL (userID,num1,num2,num3,num4,num5,num6,current__datetime,draw_date) values (muserID,numm1,numm2,numm3,numm4,numm5,numm6,NOW(),@nextSaturday);
end
Run Code Online (Sandbox Code Playgroud)
它现在起作用了。解决了。
oNa*_*are 10
您可以使用WEEKDAY
和DATE_ADD
函数来计算下一个工作日的到来。
在这里你必须做的:
SELECT
DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,
(6-WEEKDAY(NOW())),
(5-WEEKDAY(NOW()))) DAY);
Run Code Online (Sandbox Code Playgroud)
查询含义:
随着DATE_ADD
您将添加参数之间的间隔NOW()
假设我平日周六是和一个条件5
,你必须评估是否NOW()
大于5
或等于,你有休息它6
(周日),如果NOW()
不是少5
,你必须休息吧5
与NOW()
.
测试:
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2015-07-22 07:51:33 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,(6-WEEKDAY(NOW())),(5-WEEKDAY(NOW()))) DAY);
+------------------------------------------------------------------------------------------+
| DATE_ADD(NOW(),INTERVAL IF(WEEKDAY(NOW())>=5,(6-WEEKDAY(NOW())),(5-WEEKDAY(NOW()))) DAY) |
+------------------------------------------------------------------------------------------+
| 2015-07-25 07:51:34 |
+------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
如果您需要计算得到下一个星期六(如果实际星期六是晚上 9:30):
新语法:
SET @ACTUAL_DATE=NOW();
SET @NEXT_SATURDAY=DATE_ADD(@ACTUAL_DATE,INTERVAL IF(WEEKDAY(@ACTUAL_DATE)=5 && TIME(@ACTUAL_DATE)>'21:30:00',
7,
IF(WEEKDAY(@ACTUAL_DATE)>=5,
(6-WEEKDAY(@ACTUAL_DATE)),
(5-WEEKDAY(@ACTUAL_DATE))))
DAY);
Run Code Online (Sandbox Code Playgroud)
今天测试:
mysql> SET @ACTUAL_DATE=NOW();
Query OK, 0 rows affected (0.01 sec)
mysql> SET @NEXT_SATURDAY=DATE_ADD(@ACTUAL_DATE,INTERVAL IF(WEEKDAY(@ACTUAL_DATE)=5 && TIME(@ACTUAL_DATE)>'21:30:00',
-> 7,
-> IF(WEEKDAY(@ACTUAL_DATE)>=5,
-> (6-WEEKDAY(@ACTUAL_DATE)),
-> (5-WEEKDAY(@ACTUAL_DATE))))
-> DAY);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @NEXT_SATURDAY;
+---------------------+
| @NEXT_SATURDAY |
+---------------------+
| 2015-07-25 21:30:01 |
+---------------------+
1 row in set (0.00 sec)
mysql>
Run Code Online (Sandbox Code Playgroud)
但如果我们在July 25th at 21:30:01
(星期六):
mysql> SET @ACTUAL_DATE='2015-07-25 21:30:01';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @NEXT_SATURDAY=DATE_ADD(@ACTUAL_DATE,INTERVAL IF(WEEKDAY(@ACTUAL_DATE)=5 && TIME(@ACTUAL_DATE)>'21:30:00',
-> 7,
-> IF(WEEKDAY(@ACTUAL_DATE)>=5,
-> (6-WEEKDAY(@ACTUAL_DATE)),
-> (5-WEEKDAY(@ACTUAL_DATE))))
-> DAY);
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @NEXT_SATURDAY;
+---------------------+
| @NEXT_SATURDAY |
+---------------------+
| 2015-08-01 21:30:01 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6705 次 |
最近记录: |