2014-07-12 51 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