【问题标题】:Remove last characters after last space in a string删除字符串中最后一个空格后的最后一个字符
【发布时间】:2014-09-22 13:12:53
【问题描述】:

我有如下所述的字符串值。

字符串值:

乔治,马特 J

兰布拉,托尼 G.

预期输出:

乔治,马特

兰布拉,托尼

我需要像上面提到的那样修剪字母。谁能帮我解决这个问题?

我通过下面的查询在 SQL Server 中实现了同样的效果

declare @String as varchar(20) = 'Rambla, Tony G.'

select left(@string,len(@string)+1-charindex(' ',reverse(@string))) 

如何在 MS Access 中实现这一点?

我试过这些,但没有帮助

第一种方法

Left([ColumnName], Len([ColumnName]) -1)

第二种方法

SELECT LEFT(ColumnName, INSTRREV(ColumnName, " "))

【问题讨论】:

  • 您所说的“在访问中”是什么意思?在 Access VBA 或 Access SQL 中?
  • 我需要在 Access SQL 中。
  • Left([ColumnName], InStrRev([ColumnName], " ") - 1) 为我工作。请解释为什么它“没有帮助”!您的查询是“真正的”访问查询还是直通查询?
  • 它工作得很好,但我也有像Leo, Marcus 这样的字符串值,它不会显示并返回像#Func! 这样的值。对于这些类型的字符串值,我需要获得相同的字符串。我的是一个 Access 查询。
  • 看起来,如果您在 Access 中遇到该问题,那么您在 SQL Server 中也会遇到问题,问题在于它不会为这些异常返回正确的结果。该查询是否还会在 SQL Server 中使用Leo, Marcus 给您带来问题?

标签: ms-access ms-access-2007 ms-access-2010


【解决方案1】:

从您的 cmets 中可以清楚地看出,您面临的问题是检测最后是否必须删除以及需要删除多少个字符。由于您在没有测试是否确实存在缩写中间名的情况下删除字符,因此您的 SQL-Server 和 Access-SQL 解决方案都不起作用!更糟糕的是,如果 Column 为 null 或不包含任何空格字符,那么您甚至可能会遇到异常。

我建议创建一个 VBA 函数并从您的 Access 查询中调用它,因为逻辑有点复杂。

Public Function RemoveMiddleName(ByVal name As Variant) As Variant
    RemoveMiddleName = name
    If Not IsNull(name) Then
        Dim s As String, pos As Long, l As Long
        s = CStr(name)
        pos = InStrRev(s, " ")
        l = Len(s)
        If pos > 1 And l - pos <= 2 Then '1 or 2 characters at the end
            If l - pos = 1 Or (l - pos = 2 And Right$(s, 1) = ".") Then
                RemoveMiddleName = Left(s, pos - 1)
            End If
        End If
    End If
End Function

将此代码放在 VBA 模块中(而不是在表单或报告中)。

然后这样称呼它:

SELECT RemoveMiddleName([ColumnName]) As FirstLast FROM MyTable

【讨论】:

    【解决方案2】:
    Trim(Left([columnname] & "  ",InStr(1+InStr([columnname] & "  "," "),[columnname] & "  "," ")))
    

    请注意每个 & 后面的双空格 - 这可确保搜索字段中始终至少有 2 个空格。

    【讨论】:

      【解决方案3】:

      尝试删除字符串中最后一个空格字符之后的所有内容

      DECLARE @string AS VARCHAR(100)='First Second Third'
      
      select LEFT(@string, LEN(@string) - CHARINDEX(' ', REVERSE(@string)))
      

      这会给你:

      First Second
      

      【讨论】:

        猜你喜欢
        • 2020-03-12
        • 2011-12-15
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        相关资源
        最近更新 更多