2012-09-19 80 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

如果你的過程返回多行,那麼我想你將不得不使用一個函數來代替一個過程。關於錯誤,您必須將輸出參數傳遞給過程,如鏈接頁面中所示。 –