【问题标题】:MySQL Custom Function To Select RecordMySQL自定义函数选择记录
【发布时间】:2015-03-31 03:46:37
【问题描述】:

我正在尝试在 MySQL 中创建一个自定义函数,该函数将采用 UNIX 日期时间戳并将其转换回实际日期,并在该函数中根据该日期从表中选择一个值。

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 值。

【问题讨论】:

  • 可能返回值不是INT。

标签: mysql sql function


【解决方案1】:

您必须在 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);
...

【讨论】:

  • 我收到 2 个警告。第一个警告是“第 1 行的“当前”列的数据被截断”。第二个警告是“第 1 行的 'select_date' 列的数据被截断”。
  • 尝试DATE 而不是current。它仍然返回NULL 还是仅返回警告或截断结果或什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多