我正在尝试查询MySQL数据库。以整数形式存储在数据库中的字段将作为整数返回,这正如我所期望的那样。当存储过程中计算出一个值时,它总是以longlong的形式返回,即使我可以保证该数字为0或1。
我需要一种方法来确保计算字段的结果仍然作为int返回。
有趣的是,在视图中进行计算,然后查询该视图似乎可以解决问题,但它会带来巨大的性能损失。
修改
我尝试使用的各种程序的例子是:
DELIMITER //
CREATE PROCEDURE getProjectFinance(IN projectID varchar(30))
BEGIN
SELECT p.projectID as id,
(Select sum(COALESCE(v.Cost, 0))
from variations v
where v.projectID = p.projectID) as total
FROM Projects p
WHERE p.projectID = projectID;
END//
DELIMITER ;
DELIMITER //
CREATE PROCEDURE getAllProjectsFinance()
BEGIN
SELECT p.projectID as id,
(Select sum(COALESCE(v.Cost, 0))
from variations v
where v.projectID = p.projectID) as total
FROM Projects p
END//
DELIMITER ;
修改2
我试图略微简化问题。以下SQL命令返回具有单个字段(count)的记录,该字段的类型为longlong(8字节)。我希望它是整数(4字节)
类型SELECT (Select 1) as count;
使用强制转换如下:
SELECT cast((Select 1) as signed integer) as count;
答案 0 :(得分:1)
如果您只是投射计算值怎么办?
cast((
Select sum(COALESCE(v.Cost, 0))
from variations v
where v.projectID = p.projectID
)
as integer
) as total
答案 1 :(得分:0)
CREATE FUNCTION name(parameter paramType, .... ) RETURNS returnType
而不是create procedure ...
您还应该在函数体的末尾使用return子句。有关更多信息,请查看the documentation常用和功能特定部分。