[英]use function in stored procedure in mysql
我已經在mysql中創建了一個存儲過程:
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_PublicationsByDate`(IN _DateS DATE, IN _DateF DATE)
BEGIN
SELECT
CONCAT(EXTRACT(YEAR FROM filed_date), " Q", EXTRACT(QUARTER FROM filed_date)) AS date,
count(CONCAT(EXTRACT(YEAR FROM filed_date), " Q", EXTRACT(QUARTER FROM filed_date))) AS count
FROM
applications
WHERE
filed_date between _DateS and _DateF
GROUP BY
CONCAT(EXTRACT(YEAR FROM filed_date), " Q", EXTRACT(QUARTER FROM filed_date))
ORDER BY
CONCAT(EXTRACT(YEAR FROM filed_date), " Q", EXTRACT(QUARTER FROM filed_date));
END
我想替換長代碼
CONCAT(EXTRACT(YEAR FROM filed_date), " Q", EXTRACT(QUARTER FROM filed_date))
函數調用(為方便起見,在偽C ++中為示例):
char* func(char* date)
{
return CONCAT(EXTRACT(YEAR FROM date), " Q", EXTRACT(QUARTER FROM date))
}
由於這些長表達式可能會根據外部參數(偽代碼)而有所不同:
DECLARE F FUNCTION;
IF (_Type = 0)
SET F = Func1;
ELSE
SET F = Func2;
END IF;
SELECT F(filed_date), count(F(filed_date))...
我如何在mysql中創建它?
CREATE FUNCTION決定我的問題。
可惜的是,外部的功能
CREATE DEFINER=`root`@`localhost` FUNCTION `prepare_ScaleCondition`(_Scale VARCHAR(16), _Date DATE) RETURNS varchar(64) CHARSET utf8
BEGIN
DECLARE _ScaleCondition VARCHAR(128) DEFAULT EXTRACT(YEAR FROM _Date);
CASE _Scale
WHEN 'quarter' THEN SET _ScaleCondition = CONCAT(EXTRACT(YEAR FROM _Date), ' Q', EXTRACT(QUARTER FROM _Date));
WHEN 'year' THEN SET _ScaleCondition = EXTRACT(YEAR FROM _Date);
WHEN 'month' THEN SET _ScaleCondition = CONCAT(EXTRACT(YEAR FROM _Date), ' M', EXTRACT(MONTH FROM _Date));
WHEN 'week' THEN SET _ScaleCondition = CONCAT(EXTRACT(YEAR FROM _Date), ' W', EXTRACT(WEEK FROM _Date));
END CASE;
RETURN _ScaleCondition;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_PublicationsByDate`(IN _DateS DATE, IN _DateF DATE)
BEGIN
SELECT
prepare_ScaleCondition(filed_date) AS date,
count(prepare_ScaleCondition(filed_date)) AS count
FROM
applications
WHERE
filed_date between _DateS and _DateF
GROUP BY
prepare_ScaleCondition(filed_date)
ORDER BY
prepare_ScaleCondition(filed_date);
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.