0

我正在尝试查询 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 命令返回一个带有单个字段(计数)的记录,该字段的类型为 longlong(8 个字节)。我希望它是整数类型(4 个字节)

SELECT (Select 1) as count;

如下使用 cast 也无济于事:

SELECT cast((Select 1) as signed integer) as count;
4

2 回答 2

1

如果您只是转换计算值怎么办?

cast((
    Select sum(COALESCE(v.Cost, 0))
    from variations v
    where v.projectID = p.projectID
    ) 
    as integer
) as total
于 2012-09-19T11:06:18.973 回答
0

CREATE FUNCTION name(parameter paramType, .... ) RETURNS returnType而不是create procedure ...你还应该在函数体的末尾使用 return 子句。有关更多信息,请查看文档中的常见部分和特定功能部分。

于 2012-09-19T11:03:21.863 回答