Oracle SQL - 查找数据集的MIN值,但在MIN计算中排除一个值

时间:2011-07-05 19:38:32

标签: sql oracle oracle10g

Oracle版本:10g

我正在尝试使用MIN函数来查找数据集的最小值/最小值。我正在执行MIN的列是VARCHAR2列。此列将包含数值,或者值为“ - ”,表示该值不适用。

在列上执行MIN()功能时,始终返回“ - ” 我想在MIN语句中找到一种排除' - '的方法。我不能在语句中使用WHERE子句来过滤掉带有' - '的列,因为这会排除有效数据。

注意:这是一个巨大的遗留查询(500多行),因此重写这个大量查询并不是一个真正的选择。

2 个答案:

答案 0 :(得分:7)

MIN(CASE WHEN ColX = '--' THEN NULL ELSE ColX END)

这在SQL Server中有效,我认为也可能适用于Oracle。

作为旁注,永远不会在字符串字段中存储数字数据

从空间角度来看效率很低,在进行不等式比较时会得到一些奇怪的结果。

如果表格中有这些行:

010
009
1

MAX值为1MIN值为009

答案 1 :(得分:3)

你真的只想让聚合函数避免这个值。聚合跳过空值,因此将有问题的值转换为null:

min(case your_field
    when '--' then null
    else your_field
    end)

另外,正如@JNK指出的那样,将数字存储为字符串充满了危险。例如,除非您的数字全部填充到相同的长度,min可能会给您错误的结果:作为字符串,'1000'小于'2'。您可以使用floatint函数将字符串转换为实际数字,但如果您有任何其他非数字字符,则SQL将引发错误。