MySQL:用select语句+计算创建函数

MySQL: Create function with select statement + calculation

我需要你的帮助。我应该创建一个函数来计算处方的处方成本。公式应该是这样的:

药价x剂量x上限(duartion/24h)

函数的签名是:

处方费用(mname varchar(100),剂量 int,持续时间)

DELIMITER $$
CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN 
    DECLARE prescription_costs INT;
    IF mname < 0 THEN 
        SET prescription_costs = 0;
    ELSEIF dosage < 0 THEN
        SET prescription_costs = 0;
    ELSEIF duration < 0 THEN
        SET prescription_costs = 0;
    ELSE 
        SET prescription_costs = price*dosage*ceiling(duration/24);
    END IF;

    RETURN (prescription_costs);
END;
$$
DELIMITER ;

所以,在 运行 之后我会得到这个 window:

我必须使用药物名称,而不是使用药物的价格,它指的是它在 table 中的价格。

table处方是:

就是说,如果我输入药名,应该是按价格来计算的,但我不知道如何。

我想我必须在创建函数语句中组合 select 语句。

顺便说一句:英语不是我的母语!!!有错误请见谅!

您可以使用 SELECT...INTO 语句并执行如下操作:

SELECT your_price_column INTO price FROM your_table WHERE Name = mname
IF price < 0 THEN 
    SET prescription_costs = 0;
...
CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN 
    DECLARE prescription_costs INT;
    DECLARE price decimal(8,2);
    SELECT Price into price from medicine where Name=mname;
    IF price < 0 THEN 
        SET prescription_costs = 0;

像这样..?

CREATE FUNCTION prescription_costs (mname varchar(100), dosage int, duration time) RETURNS INT
BEGIN 
    DECLARE prescription_costs INT;
    DECLARE price1 DECIMAL(8,2);
    SELECT Preis into price1 from medicine where Name = mname;
    IF price1 < 0 THEN 
        SET prescription_costs = 0;
    ELSEIF dosage < 0 THEN
        SET prescription_costs = 0;
    ELSEIF duration < '0' THEN
        SET prescription_costs = 0;
    ELSE 
        SET prescription_costs = price1*dosage*ceiling(dauer/24h);
    END IF;

    RETURN (prescription_costs);
END;

上面的代码快完成了,但是有一个小错误导致计算错误。 ceiling() 函数可能是错误的来源。 我们有什么论据?天花板(date/24h)?

这可能是例如...ceiling('00:50:00'/'24:00:00') 但如何计算呢?但是,我收到错误 1292。

错误代码:1292。截断不正确的 DOUBLE 值:“24:00:00”

我该怎么办?我该如何纠正?

请帮帮我?