Sql 在Mid和InStr查询访问2007中将#错误替换为NULL

Sql 在Mid和InStr查询访问2007中将#错误替换为NULL,sql,ms-access,ms-access-2007,Sql,Ms Access,Ms Access 2007,我在Access 2007中编写了一个查询,以查找字符串的位置,然后输出所述字符串。为此,我首先使用Instr找到“99”的起始位置,然后使用该结果和Mid提取所需的字符串长度 我遇到的问题是,当Instr的结果为“0”时,Mid函数将输出#Error。我试图找到一种方法,用NULL替换任何#Error实例 样本数据: TotalRef 111111 - 99222222 test line number 1 222222 - 94444444 test line number 2 333333

我在Access 2007中编写了一个查询,以查找字符串的位置,然后输出所述字符串。为此,我首先使用
Instr
找到“99”的起始位置,然后使用该结果和
Mid
提取所需的字符串长度

我遇到的问题是,当
Instr
的结果为“0”时,
Mid
函数将输出#Error。我试图找到一种方法,用NULL替换任何#Error实例

样本数据:

TotalRef
111111 - 99222222 test line number 1
222222 - 94444444 test line number 2
333333 - test line number 3 99888888
444444 - test line number 4 95555555
查询:

SELECT 
    A.TotalRef,
    Mid ([A].[TotalRef], Pos,8) AS Acc,
    InStr(9,[A].[TotalRef],"99")AS Pos
FROM A;
实际结果:

TotalRef | Acc | Pos
111111 - 99222222 test line number 1 | 99222222 | 10
222222 - 94444444 test line number 2 | #Error | 0
333333 - test line number 3 99888888 | 99888888 | 29
444444 - test line number 4 95555555 | #Error | 0
所需结果:

TotalRef | Acc | Pos
111111 - 99222222 test line number 1 | 99222222 | 10
222222 - 94444444 test line number 2 | NULL | 0
333333 - test line number 3 99888888 | 99888888 | 29
444444 - test line number 4 95555555 | NULL | 0
我尝试过使用IIF,但运气不佳,在这里或谷歌上都找不到解决方案。如果您能在这个问题上提供任何帮助,我们将不胜感激


谢谢。

使用
IIF
排除
Pos=0

SELECT 
    A.TotalRef,
    iif(Pos > 0, Mid([A].[TotalRef], Pos,8), null) AS Acc,
    InStr(9, [A].[TotalRef], "99") AS Pos
FROM A;

你差点就成功了,只是需要一点IIF来像这样调整它

SELECT 
    A.TotalRef, 
    InStr(8,[A].[TotalRef],"99") AS Pos, 
    IIf([Pos]>0,Mid([A].[TotalRef],[Pos],8),Null) AS Acc

啊,亚历克斯赢了我!:)

啊,真不敢相信我没看到。这么简单。谢谢