如何从db获取浮点解析值?

时间:2014-07-12 23:54:12

标签: php mysql

我试图从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'];

提前致谢!

3 个答案:

答案 0 :(得分:1)

每个评论的charge字段为varchar,其值为0,5。在这种情况下,您可以使用REPLACE()函数将,替换为.,如

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

答案 1 :(得分:0)

免责声明:这可能不是一个完整的答案..这只是向您展示如何将您的varchar'数字'转换为实际的小数。

我不确定你在考虑你给我们的内容时究竟需要什么......但是你可以将数据转换成数字就像这样

测试样本数据与您的DECIMAL匹配:

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;

我真的没有办法测试这个,但我相信它会做你想要的:)

答案 2 :(得分:0)

MySQL用于从整数部分界定浮点数的小数部分的语法总是使用点。 MySQL的本地化不允许逗号,尽管用户的国家风俗。

例如,一半的值代表0.5,即使在欧洲也无法代表0,5