Ms access MS Access SQL中是否有与子字符串函数等效的函数?

Ms access MS Access SQL中是否有与子字符串函数等效的函数?,ms-access,Ms Access,我想在MS Access查询中执行类似的操作,但子字符串是一个未定义的函数 SELECT DISTINCT SUBSTRING(LastName, 1, 1) FROM Authors; 您可以使用VBA字符串函数(正如@onedaywhen在注释中指出的,它们实际上不是VBA函数,而是MS Jet库中的等效函数。就函数签名而言,它们被调用并工作相同,即使不需要MS Access的实际存在,它们才可用。): 我认为Access中有MID()和LEFT()以及RIGHT() 我找不到添加此函数的

我想在MS Access查询中执行类似的操作,但子字符串是一个未定义的函数

SELECT DISTINCT SUBSTRING(LastName, 1, 1)
FROM Authors;

您可以使用VBA字符串函数(正如@onedaywhen在注释中指出的,它们实际上不是VBA函数,而是MS Jet库中的等效函数。就函数签名而言,它们被调用并工作相同,即使不需要MS Access的实际存在,它们才可用。):


我认为Access中有MID()和LEFT()以及RIGHT()

我找不到添加此函数的现成模块,所以我写了一个:

在Access中,转到“数据库工具”功能区,在“宏”区域中单击“进入Visual Basic”。在左上角的项目区域中,右键单击文件名并选择插入->模块。在模块中,粘贴以下内容:

Public Function Substring_Index(strWord As String, strDelim As String, intCount As Integer) As String

Substring_Index = delims

start = 0
test = ""

For i = 1 To intCount
    oldstart = start + 1
    start = InStr(oldstart, strWord, strDelim)
    Substring_Index = Mid(strWord, oldstart, start - oldstart)
Next i

End Function
将模块另存为module1(默认设置)。现在可以使用如下语句:

SELECT Substring_Index([fieldname],",",2) FROM table

我与msaccess vba合作过很多次。 我认为您正在寻找中间功能

范例

    dim myReturn as string
    myreturn = mid("bonjour tout le monde",9,4)

将返回值“tout”

挑剔点:所涉及的dll(我相信)是Expsrv.dll和vbajet32.dll,MS文档将其统称为Jet Expression Services。所以我认为我们可以把它们看作是本地的ACE/JET表达式,而不是上下文中的“VBA函数”。请注意,有些表达式在ACE/Jet中的工作方式与其等效的VBA函数不同,例如IIF():VBA始终计算true和false子句,而ACE/Jet则不计算。@onedaywhen:感谢您的澄清。我对写“VBA函数”犹豫不决,但我不知道该写什么。对于上面提到的字符串函数,它们显然是等价的。OTOH-我认为您甚至可以在Access查询中使用用户定义的VBA函数,但这可能是特定于Access的。我想这就是为什么Nz()在本机Access中可用,但在从Excel运行查询时不可用。Access是VBA的主机。这真的是VBA。VBAjet.dll只是VBA的加载程序。我刚才看到的版本只有两个功能:获取表达式服务和加载表达式服务。如果Get发现内存中已经加载了VBA/VB dll,则使用它。如果不是,Access将加载副本。虽然加载程序名为vbajet32,但Access实际上是VBA主机,它有钩子将VBA钩住Jet。我将这些钩子与LEN一起使用,并从字符串值中获取我所需的大部分内容。欢迎使用StackOverflow!你的答案是正确的,但它可能不会得到任何投票,因为它没有提供任何新的信息,而这些信息在被接受的答案中还没有。
    dim myReturn as string
    myreturn = mid("bonjour tout le monde",9,4)