我正在尝试在Access中编写查询。是否可以进行通配符替换(类似这样)?
SELECT REPLACE(MyStatus, '<div' & % & '>', '') FROM tblWork
我有类似的数据:<div class="Style123">Status: 1/01/2019 Work was completed.
我想将查询结果转换为:Status: 1/01/2019 Work was completed.
注意:我不想更新表中的数据。
答案 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;