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”
我该怎么办?我该如何纠正?
请帮帮我?
我需要你的帮助。我应该创建一个函数来计算处方的处方成本。公式应该是这样的:
药价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”
我该怎么办?我该如何纠正?
请帮帮我?