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

Sql 字符串中每个单词的第一个字符,sql,vba,ms-access,Sql,Vba,Ms Access,我在MS Access表中有一个字段,其中包含人们的中间名,我需要在SQL查询中获取每个名字的首字母(缩写)。该字段称为“中间名称” 例如,如果中间名为“John David”,我希望输出为“J D”。如果中间的名称是'John',我希望输出是'J' 我找到了一些VBA代码,可以执行此操作,但是当我在SQL查询中调用它时,我得到一个错误- 条件表达式中的数据类型不匹配 该字段为“文本”类型,这是VBA: Function GetFirstLetters(middlename As String)

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

例如,如果中间名为“John David”,我希望输出为“J D”。如果中间的名称是'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\u name)
我得到了上面提到的错误。

如果数据库数据在
middle\u name
列中有空值,那么该函数调用将产生该错误,因为该函数需要一个
字符串,而NULL不是字符串

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

GetFirstLetters(新西兰([中间名],“”))
或者,您可以保留原始函数调用,但随后您的函数应接受
Variant
类型参数,然后处理空值:

函数GetFirstLetters(middlename作为变量)作为字符串
如果我是空的(中间名),那么
退出功能
如果结束
'代码的其余部分。。。
端函数

如果数据库数据的
中间名
列中有NULL值,则该函数调用将产生该错误,因为该函数需要
字符串
,NULL不是字符串

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

GetFirstLetters(新西兰([中间名],“”))
或者,您可以保留原始函数调用,但随后您的函数应接受
Variant
类型参数,然后处理空值:

函数GetFirstLetters(middlename作为变量)作为字符串
如果我是空的(中间名),那么
退出功能
如果结束
'代码的其余部分。。。
端函数

难道你不能找到
空格
并得到第一个字符吗?这个错误可能意味着你的
中间名
列中有一些空值。@trincot啊,是的,你是正确的。你知道有什么办法解决这个问题吗?难道你不能找到
空格
并得到第一个字符吗?这个错误可能意味着你的
中间名
列中有一些空值。@trincot啊,是的,你是对的。你知道有什么办法可以避开吗?