字符串中每个单词的第一个字符

时间:2020-02-23 19:58:53

标签: sql vba ms-access

我在MS Access表中有一个包含人的中间名的字段,我需要在SQL查询中获取每个名字的首字母(缩写)。该字段称为'middle_names'

例如如果middle_name是“ John David”,我希望输出是“ J D”。如果middle_name是“ John”,我希望输出是“ J”。

我找到了一些应该执行此操作的VBA代码,但是当我在SQL查询中调用它时,出现错误-

条件表达式中的数据类型不匹配

该字段为“文本”类型,这是VBA:

Function GetFirstLetters(middlename As String) As String
    Dim arr
    Dim I As Long
    arr = VBA.Split(middlename, " ")
    If IsArray(arr) Then
        For I = LBound(arr) To UBound(arr)
            GetFirstLetters = GetFirstLetters & Left(arr(I), 1)
        Next I
    Else
        GetFirstLetters = Left(arr, 1)
    End If
End Function

然后我在SQL查询中调用代码,例如:GetFirstLetters(middle_name)时,遇到上面提到的错误。

1 个答案:

答案 0 :(得分:2)

如果您的数据库数据在列middle_name中具有NULL值,则该函数调用将产生该错误,因为该函数期望一个String并且NULL不是字符串。

有几种方法可以解决此问题,其中一种方法是在将查询传递给函数之前,将您的查询修改为将NULL转换为空字符串:

GetFirstLetters(Nz([middle_name], ""))

或者,您可以保留原始的函数调用,但是您的函数应该接受Variant类型的参数,然后处理Empty值:

Function GetFirstLetters(middlename As Variant) As String
    If IsEmpty(middlename) Then
        Exit Function
    End If
    ' Rest of your code ...
End Function
相关问题