Oracle版本:10g
我正在尝试使用MIN
函数来查找数据集的最小值/最小值。我正在执行MIN
的列是VARCHAR2
列。此列将包含数值,或者值为“ - ”,表示该值不适用。
在列上执行MIN()
功能时,始终返回“ - ”
我想在MIN语句中找到一种排除' - '的方法。我不能在语句中使用WHERE子句来过滤掉带有' - '的列,因为这会排除有效数据。
注意:这是一个巨大的遗留查询(500多行),因此重写这个大量查询并不是一个真正的选择。
答案 0 :(得分:7)
MIN(CASE WHEN ColX = '--' THEN NULL ELSE ColX END)
这在SQL Server中有效,我认为也可能适用于Oracle。
作为旁注,永远不会在字符串字段中存储数字数据。
从空间角度来看效率很低,在进行不等式比较时会得到一些奇怪的结果。
如果表格中有这些行:
010
009
1
MAX
值为1
,MIN
值为009
答案 1 :(得分:3)
你真的只想让聚合函数避免这个值。聚合跳过空值,因此将有问题的值转换为null:
min(case your_field
when '--' then null
else your_field
end)
另外,正如@JNK指出的那样,将数字存储为字符串充满了危险。例如,除非您的数字全部填充到相同的长度,min
可能会给您错误的结果:作为字符串,'1000'小于'2'。您可以使用float
或int
函数将字符串转换为实际数字,但如果您有任何其他非数字字符,则SQL将引发错误。