Mysql 获取列名和时获取错误答案

Mysql 获取列名和时获取错误答案,mysql,Mysql,我在获取数据库中某个列名的总和(PRICE)时遇到问题。如果我插入1000.00和3600.00得到它们的总和,我得到的是4.00而不是4600.00。但是当总数低于1000时,我得到了正确的答案 您的price\u per\u case列似乎是char或varchar列,而不是像decimal(10,2)这样的数字列。因此,它将列转换为double,但忽略、字符之后的所有内容(可能在转换过程中发出警告)。您可以通过尝试以下操作来验证这一点: select '1,234' + '3,456';

我在获取数据库中某个列名的总和(PRICE)时遇到问题。如果我插入1000.00和3600.00得到它们的总和,我得到的是4.00而不是4600.00。但是当总数低于1000时,我得到了正确的答案


您的
price\u per\u case
列似乎是
char
varchar
列,而不是像
decimal(10,2)
这样的数字列。因此,它将列转换为
double
,但忽略
字符之后的所有内容(可能在转换过程中发出警告)。您可以通过尝试以下操作来验证这一点:

select '1,234' + '3,456';
您将得到
4

您应该尝试运行:

update ordered set price_per_case = replace(price_per_case, ',', ''); /* get rid of commas */

然后您应该将此列的类型更改为
十进制(10,2)
或某种适当的精度

可能您正在编程的机器具有不同的MySql服务器“区域设置”(都在同一台机器上)? 在这种情况下,货币/双精度/十进制的格式也不同。 为了避免在获取查询结果之前需要更改.NET方法/sub/function中的区域设置

Threading.Thread.CurrentThread.CurrentCulture = New CultureInfo("it-IT")
Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo("it-IT")
或者在MySql中更改区域设置

SET lc_time_names = 'it_IT'; Here continue your query

在本例中,我使用了意大利语区域设置,除非您的数据和/或查询有问题,否则这是不可能的。你能包括样本数据和你正在使用的查询吗?提供一个。我编辑了问题并添加了样本图片。谢谢是的,先生,我用的是varchar,我试过你给的代码,先生,它工作了,但是当总和是整数时,我最后没有得到.00。示例:总和预期为4000.00,我得到的是4000。我认为更好的方法是更改数据类型。感谢Sir问题是我使用的是数据类型varchar而不是decimal,这归功于ronald aaronson。即使您使用的是varchar类型,如果您在vb.net上编程的机器上的“区域设置”(我假设您从vb.net传递此数据)与MySql服务器具有相同的“区域设置”,则十进制分隔符必须相同。不过,我很高兴你解决了这个问题。