2

我目前正在编写一个动态组合 sql 查询以检索许多帖子的函数,但我遇到了一个较小的问题。

伪代码:

if trim$(sSqlQuery) <> "" then

    sSqlQuery = "foo foo ) foo"

end if


if 1 = 1 then

    sSqlQuery = sSqlQuery & "bar bar bar"

end if

该函数大部分时间返回正确的 sql-query,但由于在此之前的较早函数中的某些情况,将触发第二个 if 子句。导致奇怪的查询结果。

我需要做的是弄清楚如何在将第二组查询附加到第二个 if 子句中的总查询之前删除 sSqlQuery 中最后一次出现的“)”。

在伪中,我认为它看起来像这样:

if 1 = 1 then

   call removeLastOccurringStringFromString(sSqlQuery, ")")

   sSqlQuery = sSqlQuery & "bar bar bar"

end if

但是,我发现很难掌握Right() Left()Mid()功能。

我试过的是这样的:

nLen = InStrRev(sSqlSokUrval, ")") ' To get the positional value of the last ")" 

在那之后,我完全迷失了。因为如果我用它作为子串,Mid()我只会得到“)”而没有别的。

任何关于如何解决这个问题的想法和/或提示将不胜感激!谢谢!

4

1 回答 1

5
'Searches subject and removes last (and *only* last) occurence of the findstring
Function RemoveLastOccurenceOf(subject, findstring)
    Dim pos
    'Find last occurence of findstring
    pos = InstrRev(subject, findstring, -1, vbBinaryCompare)  'use vbTextCompare for case-INsensitive search

    if pos>0 then 'Found it?
        'Take left of subject UP UNTIL the point where it was found
        '...Skip length of findstring
        '...Add rest of string
        RemoveLastOccurenceOf = Left(subject, pos - 1) & Mid(subject, pos + len(findstring))
    else 'Nope
        'Return entire subject
        RemoveLastOccurenceOf = subject
    end if
End Function
于 2013-05-08T08:59:38.683 回答