使用 Least() 赋值
Assign a value using Least()
我在触发器内使用循环来更新 MySQL 数据库中的层次关系。表是创新的。
我有的是:
SET vDateCounter = NEW.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));
对最佳方法有什么想法吗?
您可以使用函数并从触发器调用。
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它。
SELECT dbo.FN_Least('2015-04-21 06:00:00','2015-04-20 18:00:00')
我在触发器内使用循环来更新 MySQL 数据库中的层次关系。表是创新的。
我有的是:
SET vDateCounter = NEW.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));
对最佳方法有什么想法吗?
您可以使用函数并从触发器调用。
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它。
SELECT dbo.FN_Least('2015-04-21 06:00:00','2015-04-20 18:00:00')