你沒有提到你在做這個事情的上下文......一個VBA過程,一個Access中的查詢,一個來自外部訪問會話的查詢,但這可能是非常如果您可以使用Split()
函數,那麼這很容易。請從立即窗口中考慮這個例子。
strUrl = "http://websiteurl.com/sometext-STUFFIWANT-foo-bar"
varPieces = Split(strUrl, "-")
? varPieces(1)
STUFFIWANT
既然你說你想要做的這一個查詢,我認爲你在尋找這樣的事情......
SELECT
Mid(
[column],
InStr([column], "-") +1,
(InStr(InStr([column], "-") +1, [column], "-") - InStr([column], "-")) -1
) AS stuff_i_want
FROM YourTable;
甚至可能就足夠了。但是,只要[column]
爲空,它就會拋出「無效使用空值」錯誤。並且它還會扼殺[column]
值,其中包含少於2個破折號。如果你能處理這些限制,你可能會很好。但是,如果您需要修改複雜的字段表達式......祝您好運!
如果這是一個查詢,您將在Access應用程序會話中運行,您可以根據前面給出的Split()
示例創建一個用戶定義的函數。然後,您的查詢將很容易編寫。
SELECT
GetStuffYouWant([column]) AS stuff_i_want
FROM YourTable;
您可能聽說過UDF可能在查詢中速度較慢的警告。但是,在這種情況下,替代方案是Mid()
加上一堆InStr()
函數,這對於db引擎來說並不是一個簡單的工作負載。我將這兩種方法與包含超過1000萬行的表進行了比較。完全填充DAO記錄集花費的時間介於37到45秒之間,兩種方法都不是一致的贏家。
如果您想自己嘗試UDF方法,我將包含下面的函數。這裏是一個立即窗口會話測試與各種輸入值的功能。
? GetStuffYouWant(Null)
Null
? GetStuffYouWant("")
Null
? GetStuffYouWant("abc")
Null
? GetStuffYouWant("abc-")
Null
? GetStuffYouWant("abc-def")
Null
? GetStuffYouWant("abc-def-")
def
? GetStuffYouWant("http://websiteurl.com/sometext-STUFFIWANT-foo-bar")
STUFFIWANT
而且功能...
Public Function GetStuffYouWant(ByVal pInput As Variant, _
Optional pSplitChar As String = "-") As Variant
Dim varResult As Variant
Dim varPieces As Variant
If IsNull(pInput) Then
varResult = Null
Else
varPieces = Split(pInput, pSplitChar)
If UBound(varPieces) > 1 Then
varResult = varPieces(1)
Else
varResult = Null
End If
End If
GetStuffYouWant = varResult
End Function
編輯說這是一個查詢!謝謝 – sbozzie 2013-02-26 21:15:33
謝謝你的幫助! – sbozzie 2013-02-27 10:05:47