【问题标题】:First character of each word in a string字符串中每个单词的第一个字符
【发布时间】:2020-02-23 19:58:53
【问题描述】:

我在 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),我得到了上面提到的错误。

【问题讨论】:

  • 你不能直接找到space 并得到第一个字符吗?
  • 此错误可能意味着您的 middle_name 列中有一些 NULL 值。
  • @trincot 啊,是的,你是对的。你知道有什么方法可以解决这个问题吗?

标签: sql vba ms-access


【解决方案1】:

如果您的数据库数据在 middle_name 列中具有 NULL 值,则该函数调用将产生该错误,因为该函数需要 String 而 NULL 不是字符串。

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

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

或者,你可以保留你原来的函数调用,但是你的函数应该接受一个Variant类型的参数,然后处理一个空值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多