2011-03-02 67 views
0

我正在使用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

我不是sqlanywhere的人,但確定性意味着給定相同的數據和相同的輸入/相同的輸出。換種說法(SQL Server文檔)

確定性函數總是返回相同的結果任何時候他們 調用一組特定的輸入值,並給出 數據庫相同的狀態。即使數據庫 聲明它們的訪問權限保持不變,但每次使用特定的一組輸入值調用它們時,非確定性函數每次都會返回不同的結果 。

在你的情況你的功能,你參考CURRENT TIME,使功能非確定性,因爲只是時間的流逝使得結果不同。