使用Least()分配值

时间:2015-04-20 10:17:45

标签: mysql variables set

我在触发器内部使用循环来更新MySQL数据库中的层次关系。表是INNO。

我拥有的是:

SET vDateCounter = NEW.DateTime;

麻烦的是,这只能工作一半的时间。如果UPDATE包含更新的DateTime,我的循环开始但它不会重新处理OLD.DateTime,也不会重新处理OLD.DateTime和NEW.DateTime之间的任何事件。

例如,如果我将“2015-04-20 06:00:00”更改为“2015-04-20 18:00:00”,我希望我的更新循环始终以两个日期时间的最小值开头。

我想做的是:

SET vDateCounter = (SELECT LEAST(OLD.DateTime, NEW.DateTime));

关于最佳方法的任何想法?

1 个答案:

答案 0 :(得分:0)

你可以使用一个功能并从你的触发器调用。

CREATE FUNCTION [dbo].[FN_Least] 
(
@date1 datetime,
@date2 datetime
)
RETURNS datetime
AS
BEGIN
DECLARE @vDateCounter  datetime

 SELECT @vDateCounter= min(dateLeast)  
 FROM ( 
      SELECT @date1 AS dateLeast
      UNION ALL
      SELECT @date2 AS dateLeast
      ) AS dates
      RETURN @vDateCounter
END

在触发器中,选择它。

SELECT dbo.FN_Least('2015-04-21 06:00:00','2015-04-20 18:00:00')