2012-09-19 76 views
0

我试图查询MySQL数据库。以整数形式存储在数据库中的字段将按照我的预期以整数形式返回。当在一个存储过程中计算出一个值时,即使我能保证该数字是0或1,它也总是被返回。MySQL的计算字段中的整数

我需要一种方法来确保计算字段的结果是仍然作为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

由于您在谈论返回的值,我假设您正在讨论存储函数,而不是程序。你可以发布你的商店功能的定义('显示创建功能function_name'会有帮助)?它应该明确定义它的返回类型。 – lanzz

+0

更新,我不知道我如何显式定义返回类型。 – ForbesLindesay

回答

0

CREATE FUNCTION name(parameter paramType, ....) RETURNS returnType代替create procedure ...你也应该在年底使用return语句你的功能的身体。欲了解更多信息,请查看the documentation公共和功能特定的部分。

+0

什么时候有多个记录/多个字段? – ForbesLindesay

+0

您可以从函数返回行甚至记录集。只是适应返回类型。 – xception

+0

你能提供一个具体的例子吗?即提供一个从表中选择几条记录的函数,其中一个字段是一个计算的int?谢谢 – ForbesLindesay

1

如果您只是施加了计算值,该怎么办?

cast((
    Select sum(COALESCE(v.Cost, 0)) 
    from variations v 
    where v.projectID = p.projectID 
    ) 
    as integer 
) as total 
+0

这也适用,你从我这里得到一票:) – xception

+0

我会怎么称呼它?我得到一个错误,说我使用了一个不正确的参数数量,如果我只是用projectID调用它的话。 – ForbesLindesay

+0

如果你的过程返回多行,那么我想你将不得不使用一个函数来代替一个过程。关于错误,您必须将输出参数传递给过程,如链接页面中所示。 –