在数据库查询中使用逗号作为小数点分隔符
Using comma as decimal separator in database queries
我已将瑞典语言环境设置为使用逗号作为小数点分隔符。例如它应该是 123,45
而不是 123.45
.
测试一下:
echo 100/3;
它给出了理想的结果:
33,333333333333
然而,当使用 PHP PDO 在数据库中获取或插入数据时,它似乎不起作用。
因为如果我尝试更新 table 行:
$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 但如果我使用点,它会起作用。
同样,当我 select 数据
$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"
它将return结果以点作为小数点分隔符。 IE。 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)
这是什么意思?值是 123
和 45.67
吗?或者 123.45
和 67
?可以是其中之一。这将是完全模棱两可的。
我建议使用 en_US
在 PHP 中完成所有业务逻辑,并将语言环境更改为仅用于输出的瑞典语。
可以使用PHPnumber_format()
函数。
此函数接受一个、两个或四个参数(不是三个):
如果只给出一个参数,number
将被格式化为没有小数点,但在每组千位之间用逗号 (",") 分隔。
如果给定两个参数,number
将被格式化为 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
?>
我已将瑞典语言环境设置为使用逗号作为小数点分隔符。例如它应该是 123,45
而不是 123.45
.
测试一下:
echo 100/3;
它给出了理想的结果:
33,333333333333
然而,当使用 PHP PDO 在数据库中获取或插入数据时,它似乎不起作用。 因为如果我尝试更新 table 行:
$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 但如果我使用点,它会起作用。 同样,当我 select 数据
$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"
它将return结果以点作为小数点分隔符。 IE。 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)
这是什么意思?值是 123
和 45.67
吗?或者 123.45
和 67
?可以是其中之一。这将是完全模棱两可的。
我建议使用 en_US
在 PHP 中完成所有业务逻辑,并将语言环境更改为仅用于输出的瑞典语。
可以使用PHPnumber_format()
函数。
此函数接受一个、两个或四个参数(不是三个):
如果只给出一个参数,number
将被格式化为没有小数点,但在每组千位之间用逗号 (",") 分隔。
如果给定两个参数,number
将被格式化为 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
?>