【发布时间】:2016-04-14 12:36:21
【问题描述】:
我已将价目表从 csv 导入我的 SQL Server 数据库。效果很好。但现在有些奇怪的东西。表名为PRICE,其中包括一列(以及更多)Endprice,总共有 761 行。所有数据类型均为varchar(50)。
SELECT MAX(Endprice)
FROM PRICE
当我希望这个简单的 SQL 语句在列中显示最高价格时,我得到了错误的结果。我不知道为什么。
结果我得到 98,39,但这绝对是错误的,它必须是 100,73。
这里可以看到部分数据:
现在错误的MAX() 结果:
但是当我使用MIN 函数时,我得到了最高的!?最小值约为 50(屏幕截图部分未显示)。
SELECT Endprice FROM PRICE 的结果集是正确的。我无计可施。
【问题讨论】:
-
您的问题是
Endprice是 varchar(50),因此它比较的是字符串而不是数字,这意味着无论接下来发生什么都是 9>1。您必须将其转换为最大值之前的数字! -
永远不要将号码存储为
varchar- 您刚刚了解到这是一个坏主意的原因之一。 -
非常感谢大家!我在导入向导中对此进行了监督。但我也认为这个字符串在内部被解释为一个整数。使用数据类型 money,它可以正常工作。
标签: sql sql-server database sql-server-2008 aggregate-functions