gpt4 book ai didi

mysql - 如何存储 MySQL 间隔类型?

转载 作者:行者123 更新时间:2023-11-29 01:31:51 25 4
gpt4 key购买 nike

这是我希望能够做到的:

SET @interval_type := MONTH;
SELECT '2012-01-01' + INTERVAL 6 @interval_type;
+------------+
|'2012-06-01'|
+------------+

当然那是行不通的,MySQL 中没有“间隔”数据类型。

我希望能够在表中存储一个区间值和一个区间类型,这样我就可以让数据库快速自然地进行数学计算,而不必编写一个大的 switch 语句,ala

... ELSE IF (type = 'MONTH') { SELECT @date + INTERVAL @value MONTH; } ... 

这在 MySQL 中是否有任何支持,或者您对此有巧妙的破解方法吗?

谢谢;你摇滚。

最佳答案

对于为 cron 或类似的东西实现作业队列的人来说,这个解决方案可能会派上用场。

假设我们有一个引用日期 (DATETIME) 和重复间隔。我们希望将这两个值都存储在数据库中,并快速比较是否已经到了执行时间,以及是否将作业包含到执行队列中。间隔可能是不平凡的,例如(1 年 12 天 12 小时)并由明智的用户(管理员)控制,以便用户不会使用超出常规 DATETIME 数据类型范围的值,否则必须首先实现转换。 (18 个月 -> 1 年 6 个月)。

然后我们可以使用 DATETIME 数据类型来存储引用日期和间隔值。我们可以使用以下方法定义存储函数:

DELIMITER $$

CREATE DEFINER=`my_db`@`%` FUNCTION `add_interval`(`source` DATETIME, `interval` DATETIME) RETURNS datetime
BEGIN
DECLARE result DATETIME;

SET result = `source`;
SET result=DATE_ADD(result, INTERVAL EXTRACT(YEAR FROM `interval`) YEAR);
SET result=DATE_ADD(result, INTERVAL EXTRACT(MONTH FROM `interval`) MONTH);
SET result=DATE_ADD(result, INTERVAL EXTRACT(DAY FROM `interval`) DAY);
SET result=DATE_ADD(result, INTERVAL EXTRACT(HOUR FROM `interval`) HOUR);
SET result=DATE_ADD(result, INTERVAL EXTRACT(MINUTE FROM `interval`) MINUTE);
SET result=DATE_ADD(result, INTERVAL EXTRACT(SECOND FROM `interval`) SECOND);

RETURN result;
END

然后我们可以使用这个函数进行 DATETIME 运算,例如

// test solution
SELECT add_interval('2014-07-24 15:58:00','0001-06-00 00:00:00');

// get job from schedule table
SELECT job FROM schedule WHERE add_interval(last_execution,repetition)<NOW();

// update date of executed job
UPDATE schedule SET last_execution=add_interval(last_execution,repetition);

关于mysql - 如何存储 MySQL 间隔类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com