我正在使用SQL Anywhere,我正在编写一个函数,并且在将int(小时和分钟)转换为时间方面存在一些问题。你能救我吗?
ALTER FUNCTION "DBA"."VisitTime"
RETURNS TIME
DETERMINISTIC
BEGIN
DECLARE "timeV" time
DECLARE hourV integer;
DECLARE minuteV integer;
DECLARE minutesV integer;
SELECT HOUR(CURRENT TIME) as hourV;
SELECT MINUTE(CURRENT TIME) as minuteV;
IF minuteV BETWEEN 0 and 29
THEN SET minutesV = 30;
END IF;
IF minuteV between 30 and 59
THEN SET minutesV = 00;
SET hourV = hourV + 1;
IF hourV >= 24 THEN SET hourV = 0;
END IF;
END IF;
SET timeV = CAST(hourV || ':' || minutesV as time);
RETURN "timeV";
END;
我做错了什么?当我尝试执行此操作时,我遇到了错误(“在VisitTime中不允许结果集”)
答案 0 :(得分:0)
我不是一个sqlanywhere的人,但确定性意味着给定相同的数据和相同的输入/查询,您将获得相同的输出。换句话说(SQL Server文档)
确定性函数总是在它们出现时返回相同的结果 使用一组特定的输入值调用并给出相同的状态 数据库。非确定性函数每次都可能返回不同的结果 即使数据库,也会使用一组特定的输入值调用它们 他们访问的状态保持不变。
在你的情况下你的函数,你引用CURRENT TIME,使函数NON-deterministic,因为仅仅通过时间会使结果不同。