【问题标题】:Replace #Error with NULL in Mid and InStr query Access 2007在 Mid 和 InStr 查询 Access 2007 中将 #Error 替换为 NULL
【发布时间】:2014-02-05 12:20:38
【问题描述】:

我在 Access 2007 中编写了一个查询来查找字符串的位置,然后输出该字符串。我首先使用Instr 找到“99”的起始位置,然后将此结果与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,但没有成功,并且无法在此处或通过 google 找到解决方案。任何有关此问题的帮助将不胜感激。

谢谢。

【问题讨论】:

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


    【解决方案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;
    

    【讨论】:

    • 啊,不敢相信我没有看到。很简单。谢谢。
    【解决方案2】:

    你几乎拥有它,只需要一点 IIF 来调整它

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

    啊,亚历克斯打败了我! :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-01
      • 2013-05-26
      • 2014-02-27
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多