在Mid和InStr查询Access 2007中将#Error替换为NULL

时间:2014-02-05 12:20:39

标签: sql ms-access ms-access-2007

我在Access 2007中编写了一个查询来查找字符串的位置,然后输出所述字符串。我通过首先找到" 99"的起始位置来实现这一目标。使用Instr,然后我将此结果与Mid一起使用以提取所需的字符串长度。

我遇到的问题是Instr的结果是" 0" Mid函数将输出#Error。我试图找到一种方法来替换任何#Error的实例与NULL

示例数据:

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而没有运气,而且无法在这里或谷歌找到解决方案。对此问题的任何帮助将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:1)

使用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;

答案 1 :(得分:1)

你几乎拥有它,只需要一点IIF就可以像这样调整它

SELECT 
    A.TotalRef, 
    InStr(8,[A].[TotalRef],"99") AS Pos, 
    IIf([Pos]>0,Mid([A].[TotalRef],[Pos],8),Null) AS Acc
啊,亚历克斯打败了我! :)