2014-07-12 62 views
0

我想從一個mysql數據庫中獲得一個浮點值,這個數據庫就是這樣形成的0,5。選擇它,我回到0作爲迴應。我怎樣才能獲得浮動價值?如何從數據庫中獲得浮點解析值?

我選擇這種方式:

$requete = $this->bdd->bd->prepare('SELECT charge 
             FROM detailsfiche 
             WHERE ref_hl = :ref_hl 
             && intervenant = :intervenant'); 
    $requete->bindValue(':ref_hl', $refhl, PDO::PARAM_INT); 
    $requete->bindValue(':intervenant', $intervenant, PDO::PARAM_STR); 
    $requete->execute(); 
    $data = $requete->fetch(); 
    $requete->CloseCursor(); 
    return $data['charge']; 

提前感謝!

+1

它真的是'0,5'格式嗎?還是你的意思是'0.5'?也有你試過'選擇CAST(充電AS DECIMAL)作爲負責從...'? - - 或這個? 'SELECT ROUND(charge,2)as charge FROM ...' –

+0

@JohnRuddell,謝謝你的回覆,但是這是發回一個錯誤信息:'SQLSTATE [42000]:語法錯誤或訪問衝突:1064你在你的錯誤SQL語法;檢查與您的MySQL服務器版本相對應的手冊,以便在'SELECT CAST(收取AS DECIMAL)FROM detailsfiche WHERE ref_hl ='72817'&&'line 1'附近使用正確的語法。 – user3822066

+0

所以它存儲一個十進制數/浮點數之間的逗號而不是一個句點? –

回答

0

免責聲明:這可能不是一個完整的答案..這只是要告訴你如何將你的varchar'數字'轉換成實際的小數。

我不知道你需要考慮什麼,你已經給了我們什麼..但是你可以將數據轉換爲數字的方式是這樣的

樣本數據測試符合十進制:

SELECT CAST(testing as DECIMAL (10,2)) FROM(
SELECT 
    CONCAT(
     CAST(left_side as UNSIGNED), '.' , CAST(right_side as UNSIGNED) 
    ) as testing FROM(
SELECT 
    SUBSTRING_INDEX('0,5', ',', 1) as left_side, 
    SUBSTRING_INDEX('0,5', ',', -1) as right_side 
) as t 
) as final; 

這會給你一個小數點,在句點的左邊有10個空格,在句點的右邊有2個空格。現在轉換爲您的查詢。

把它變成您的疑問:

SELECT CAST(testing as DECIMAL (10,2)) 
FROM(
    SELECT 
     CONCAT(
      CAST(left_side as UNSIGNED), '.' , CAST(right_side as UNSIGNED) 
     ) as testing 
    FROM(
     SELECT 
      SUBSTRING_INDEX(charge, ',', 1) as left_side, 
      SUBSTRING_INDEX(charge, ',', -1) as right_side 
     FROM detailsfiche 
     WHERE ref_hl = :ref_hl && intervenant = :intervenant 
    ) as t 
) as final; 

我真的沒有辦法來測試這一點,但我相信ITLL你想要做什麼:)

1

根據註釋您chargevarchar其值有如0,5。在這種情況下,你可以使用REPLACE()功能與.

SELECT CAST(REPLACE(charge,',','.') AS float(5,3)) FROM detailsfiche 
WHERE ref_hl = :ref_hl 
AND intervenant = :intervenant 
+0

我完全忘記了REPLACE函數大聲笑..好,簡潔。但是有一件事......我相信你必須把它作爲DECIMAL而不是FLOAT –

0

MySQL的句法來代替,用於界定從整數部分浮點數的小數部分始終使用點。 MySQL的本地化不允許逗號,用戶的國家風俗。

例如,值的一半表示爲0.5,即使在歐洲也不能表示爲0,5