繁体   English   中英

在数据库查询中使用逗号作为小数点分隔符

[英]Using comma as decimal separator in database queries

我已将瑞典语言环境设置为使用逗号作为小数点分隔符。 例如,它应该是123,45而不是123.45

要测试它:

echo 100/3;

它给出了理想的结果:

33,333333333333 

但是,当使用PHP PDO获取或在数据库中插入数据时,它似乎不起作用。 对于如果我尝试更新表行:

$sql = "UPDATE
            table_name
        SET
            column_name = 123,45 //does not work but 123.45 works.
        WHERE   
            row_id = 1
    ";  
$q = $db->prepare( $sql );
$q -> execute();

在上面的代码中,如果尝试使用逗号分隔符(例如),则会出现错误。 123,45,但是如果我使用点,它就可以工作。 同样,当我选择数据时

$sql = "SELECT
            column_name
        FROM
            table_name
        WHERE   
            row_id = 1
    ";  

    $q = $db->prepare( $sql );
    $q -> execute();
    $test = $q -> fetch( PDO::FETCH_COLUMN );
    var_dump($test); //string "123.45" 

它将以点作为小数点分隔符返回结果。 即。 123.45而我想要123,45。

我做错了什么? 编辑:列数据类型是数字,刻度为2。

我认为这是因为SQL错误地将逗号作为查询语句中的逗号分隔符来读取。

因此,我认为您可以执行以下操作:

$sql = "UPDATE
        table_name
    SET
        column_name = '123,45'
    WHERE   
        row_id = 1
"; 

这对于MySQL是不可能的,因为逗号也是列表中的分隔符。 以以下查询为例:

INSERT INTO table (a,b) VALUES(123,45,67)

这是什么意思? 值是12345.67吗? 还是123.4567 可能是其中之一。 这将是完全模棱两可的。

我建议您使用en_US在PHP中完成所有业务逻辑,并将语言环境更改为瑞典语,仅用于输出。

您可以使用PHP number_format()函数。

此函数接受一个,两个或四个参数(不是三个):

如果仅给出一个参数,则number格式将不带小数,但每千个之间必须有一个逗号(“,”)。

如果提供了两个参数,则number将以decimals格式设置, decimals小数点,前面有一个点(“。”),每千个之间有逗号(“,”)。

如果所有四个给定参数, number将被格式化decimals小数, dec_point代替小数前一个点(“‘)和thousands_sep而不是逗号(’”),各组之间成千上万。

例:

<?php

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands separator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>

来源: http//php.net/manual/en/function.number-format.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM