SQL查询中的通配符替换

时间:2019-03-21 20:17:19

标签: sql ms-access

我正在尝试在Access中编写查询。是否可以进行通配符替换(类似这样)?

SELECT REPLACE(MyStatus, '<div' & % & '>', '') FROM tblWork

我有类似的数据:<div class="Style123">Status: 1/01/2019 Work was completed.

我想将查询结果转换为:Status: 1/01/2019 Work was completed.

注意:我不想更新表中的数据。

3 个答案:

答案 0 :(得分:0)

并非没有VBA。

由于可以在查询中使用VBA函数,因此这确实是可能的。 您可以使用以下功能:

Public Function LikeReplace(strInput As String, strPattern As String, strReplace As String, Optional start As Long = 1)
    Dim LenCompare As Long
    Do While start <= Len(strInput)
        For LenCompare = Len(strInput) - start + 1 To 1 Step -1
            If Mid(strInput, start, LenCompare) Like strPattern Then
                strInput = Left(strInput, start - 1) & strReplace & Right(strInput, Len(strInput) - (start + LenCompare - 1))
            End If
        Next
        start = start + 1
    Loop
    LikeReplace = strInput
End Function

这使用VBA LIKE模式进行匹配。然后,您可以在查询中实现它:

SELECT LikeReplace(MyStatus, '<div*>', '') FROM tblWork

但是,性能会受到影响,这是因为VBA函数的性能不高,以及从查询中调用VBA会导致开销。而且不能在外部应用程序中使用。

要进行更高级的模式匹配,可以使用Krish KM共享的here使用的使用正则表达式的VBA UDF

答案 1 :(得分:0)

您可以创建一个小的辅助函数:

Public Function StripDiv(ByVal Input As String) As String

    Dim Result As String

    If UBound(Split(Input, ">")) > 0 Then
        Result = Split(Input, ">")(1)
    Else
        Result = Input
    End If

    StripDiv = Result

End Function

然后:

SELECT StripDiv([MyStatus]) FROM tblWork

答案 2 :(得分:0)

我认为类似这样的方法可以解决这种情况。即使未使用通配符。

select right( MyStatus 
, LEN(MyStatus ) - InStr(MyStatus , '>')
)
from tblWork;