0

我正在使用 SQL Anywhere 并且正在编写一个函数,并且在将整数(小时和分钟)转换为时间时遇到了一点问题。你能帮助我吗?

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;

我做错了什么?当我尝试执行此操作时,出现错误(“访问时间中不允许结果集”)

4

1 回答 1

0

我不是 sqlanywhere 人,但确定性意味着给定相同的数据和相同的输入/查询,您将获得相同的输出。换一种说法(SQL Server 文档)

每当使用一组特定的输入值调用确定性函数并给定相同的数据库状态时,它们总是返回相同的结果。每次使用一组特定的输入值调用非确定性函数时,即使它们访问的数据库状态保持不变,它们也可能返回不同的结果。

在您的情况下,您的函数引用了当前时间,使函数具有非确定性,因为仅仅是时间的流逝会使结果不同。

于 2011-03-02T17:35:05.153 回答