HIA,
我有一个字符串(URL),我想在访问查询中的两个字符之间获取第一个字符串.
http://websiteurl.com/sometext-STUFFIWANT-foo-bar
所有文本都是可变的,URL中有不同数量的" - ".
我可以得到第一次出现的位置:
Instr([column],"-")+1
Run Code Online (Sandbox Code Playgroud)
而且我想我想要这样的东西:
Mid(
[column],
Instr([column],"-")+1,
InStr(InStr(1,[column],"-")-1,[column],"-")
)
Run Code Online (Sandbox Code Playgroud)
这给了我字符串的第一个块,然后是我想要的一些文本.
我非常想:"拿到第一的位置 - ,第二的位置 - ,然后返回的2点位置之间的所有文本"
我会绕圈子走一圈,虽然我觉得我很接近,但我不再进步了.
您没有提到您正在执行此操作的上下文... VBA过程,Access中的查询,来自Access会话外部的查询.但如果您可以使用该Split()功能,这可能非常简单.从立即窗口考虑此示例.
strUrl = "http://websiteurl.com/sometext-STUFFIWANT-foo-bar"
varPieces = Split(strUrl, "-")
? varPieces(1)
STUFFIWANT
Run Code Online (Sandbox Code Playgroud)
既然你已经说过你想在查询中这样做,我想你正在寻找这样的东西......
SELECT
Mid(
[column],
InStr([column], "-") +1,
(InStr(InStr([column], "-") +1, [column], "-") - InStr([column], "-")) -1
) AS stuff_i_want
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)
这甚至可能就足够了.但是,只要[column]Null ,它就会抛出"无效使用Null"错误.它还会阻塞[column]包含少于2个破折号的值.如果你可以处理这些限制,你可能会很高兴.但是如果你需要修改那个复杂的字段表达式...祝你好运!
如果这是您将在Access应用程序会话中运行的查询,则可以基于Split()我之前展示的示例创建用户定义的函数.然后您的查询将很容易编写.
SELECT
GetStuffYouWant([column]) AS stuff_i_want
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)
您可能听说过UDF查询速度慢的警告.但是,在这种情况下,替代方案是Mid()加上一堆InStr()函数,这对数据库引擎来说并不是一个简单的工作负载.我将这两种方法与一个包含超过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
Run Code Online (Sandbox Code Playgroud)
功能......
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11228 次 |
| 最近记录: |