gpt4 book ai didi

ms-access - Access 两个字符之间的字符串

转载 作者:行者123 更新时间:2023-12-02 22:12:08 26 4
gpt4 key购买 nike

你好,

我有一个字符串(一个 URL),我想在其中获取 Access 查询中两个字符之间的第一个字符串。

http://websiteurl.com/sometext-STUFFIWANT-foo-bar

所有的文本都是可变的,URL 中有不同数量的“-”。

我可以得到第一次出现的位置:

Instr([column],"-")+1

我想我想要这样的东西:

Mid(
[column],
Instr([column],"-")+1,
InStr(InStr(1,[column],"-")-1,[column],"-")
)

然而,这给了我字符串的第一 block ,然后是我想要的一些文本。

理想情况下,我希望:“获取第一个 - 的位置,第二个 - 的位置,然后返回这两个位置之间的所有文本”

我在兜圈子,虽然我认为我很接近,但我不再取得进步。

最佳答案

您没有提及您执行此操作的上下文......一个 VBA 过程,一个 Access 中的查询,一个来自 Access session 外部的查询。但是,如果您可以使用 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] 为 Null,它就会抛出“Null 的无效使用”错误。它还会阻塞包含少于 2 个破折号的 [column] 值。如果你能处理这些限制,你就可以开始了。但是,如果您需要修改那个复杂的字段表达式……祝您好运!

如果这是您将从 Access 应用程序 session 中运行的查询,您可以根据我之前向您展示的 Split() 示例创建一个用户定义的函数。那么您的查询将很容易编写。

SELECT
GetStuffYouWant([column]) AS stuff_i_want
FROM YourTable;

您可能听说过 UDF 在查询中可能很慢的警告。然而,在这种情况下,替代方法是 Mid() 加上一堆 InStr() 函数,这对于数据库引擎来说并不是一个真正容易的工作负载。我将这两种方法与包含超过 1000 万行的表进行了比较。完全填充 DAO 记录集所花费的时间在 37 到 45 秒之间,这两种方法都没有成为一致的赢家。

如果您想自己尝试 UDF 方法,我在下面包含了函数。这是一个即时窗口 session ,用于测试具有各种输入值的函数。

? 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

关于ms-access - Access 两个字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com