Function 由于文本字段为空字符串,ms access中的MIN函数出现意外结果

Function 由于文本字段为空字符串,ms access中的MIN函数出现意外结果,function,ms-access,min,Function,Ms Access,Min,如果对文本字段使用MIN函数,则会得到意外结果。 我有一个表,其中有一个文本字段,具有以下值“a”、“c”。 我的期望是返回空值(当您对表进行排序时,空字符串位于'a'之前),但结果是我得到了'c' 通过在access数据库中执行以下查询,可以很容易地看到此问题: 创建表testbug(Field1 varchar(255)NULL) 在testbug(字段1)中插入值('a') 在testbug(字段1)中插入值(“”) 在testbug(字段1)中插入值('c') 在testbug(字段1)

如果对文本字段使用MIN函数,则会得到意外结果。 我有一个表,其中有一个文本字段,具有以下值“a”、“c”。 我的期望是返回空值(当您对表进行排序时,空字符串位于'a'之前),但结果是我得到了'c'

通过在access数据库中执行以下查询,可以很容易地看到此问题:

创建表testbug(Field1 varchar(255)NULL)
在testbug(字段1)中插入值('a')
在testbug(字段1)中插入值(“”)
在testbug(字段1)中插入值('c')
在testbug(字段1)中插入值('d')
从testbug中选择min(field1)

如果空白值包含其他东西(例如空间),那么它的工作是正确的! 是否有人可以复制这个和/或解释和/或指出这是否是一个已知的bug(我找不到任何关于这个的信息)

我使用以下版本:

Microsoft Office Professional 2010

Microsoft Access版本:14.0.7166.5000(32位)

MIN只会忽略空值

如果仍要使用带有空值的MIN,可以尝试:

SELECT MIN(Nz(Field1, " ")) FROM testbug

MIN函数似乎确实将空值(零长度字符串值)处理为NULL。 我在testbug表中添加了一个Field2,并手动添加了两行:

  • 字段1没有值,字段2有值“k”
  • 字段1的值,字段2的值“l”,删除字段1的值
我还在字段2中为表中插入的第二行输入了一个值“m”。 接下来,我运行了以下查询:

SELECT Field1, Field2, 
IIf(min(Field1) Is Null,'null','not null') AS result, Len(Field1)
FROM testbug
GROUP BY Field1, Field2
对于所有为null或为空的值,IIF函数返回null。 对于插入的第二行,函数Len返回0,这意味着这是一个零长度值。但是,IIF函数返回null。 也就是说,MIN似乎将空值处理为空值。 显然,这是MS Access中的标准行为

希望这有帮助。
也希望这里的帮助比你在Helpmij;)上得到的帮助更好

如果索引
字段1
,它是否工作正常?是的,添加索引后它工作正常。好极了!但我不想仅仅为了让MIN函数正常工作而在字段上添加索引。大多数时候我也不能添加索引,因为我主要处理的是客户数据库,在那里我不能/可能不能编辑任何内容,只能查询。首先,我的表中没有空值,只有一个空字符串。如果MIN函数通过设计忽略空字符串,我希望在下一页看到这一点,但我没有:如果你说的是真的,为什么它返回“c”而不是“a”?我只能找到MIN的Transact-SQL定义:当MIN应用于字符串时,它会按字母顺序选择最后一个字符,这里是“c”。最后,我认为Access SQL处理的是空字符串,比如NULL,但不要在这一点上引用我的话。请原谅我的最后一句话,这不是真的。感谢您花时间研究这个问题(尤其感谢您对我的帮助MIJ经历表示的同情;-)可能是ms access的MIN函数将空值处理为NULL值,因此不会返回emtpy值,但在这种情况下,我们希望使用“a”而不是“c”,不是吗?显然不是。如果您添加WHERE子句Len(NZ(Veld1),))0,则结果排序似乎很好。我同意这是不合逻辑的行为。