2015-03-31 116 views
0

我想在MySQL中创建一个自定义函数,它将采用UNIX日期时间戳并将其转换回实际日期,并在该函数中从基于该日期的表中选择一个值。 MySQL自定义函数选择记录

Create function fiscal(current TIMESTAMP) 
Returns INT 
Begin 
    Declare select_date DATE; 
    Declare select_year INT(11); 
    SET select_date = FROM_UNIXTIME(current); 
    SET select_date = DATE_FORMAT(select_date, '%m-%d-%y'); 
    SET select_year = (SELECT Year FROM DateInfo WHERE DateInfo_ID = select_date); 
    Return select_year; 
END 

它返回一个NULL值。

+0

可能返回的值不是INT。 – 2015-03-31 04:13:32

回答

0

您必须在RETURNS语句中指定返回值的数据类型。它可以是任何有效的MySQL数据类型。

RETURN语句向调用者返回一个值。每当达到RETURN语句时,存储的函数的执行立即终止。

对于相同的输入参数,如果存储的函数返回相同的结果,则认为它是确定性的,否则就不确定。

DELIMITER $$ 
Create function fiscal(current TIMESTAMP) 
Returns INT(11) NOT DETERMINISTIC 
Begin 
    Declare select_date DATE; 
    Declare select_year INT(11); 
    SET select_date = FROM_UNIXTIME(current); 
    SET select_date = DATE_FORMAT(select_date, '%m-%d-%y'); 
    SET select_year = (SELECT Year FROM DateInfo WHERE DateInfo_ID = select_date); 
    Return (select_year); 
END 

OR可能是返回值不是INT。 在这种情况下,试试这个代替:

... 
Returns VARCHAR(10) 
... 
Declare select_year VARCHAR(10); 
... 
+0

我收到2条警告。第1条警告是“数据在第1行被截断为”当前“列。第二个警告是“数据被截断列'select_date'在第1行”。 – 2015-03-31 12:36:37

+0

尝试'DATE'而不是'current'。它仍然返回NULL或只是警告或截断的结果或什么? – 2015-04-02 08:52:33