删除字符串中最后一个空格后的最后一个字符
Posted
技术标签:
【中文标题】删除字符串中最后一个空格后的最后一个字符【英文标题】: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
给您带来问题?
【参考方案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
【讨论】:
以上是关于删除字符串中最后一个空格后的最后一个字符的主要内容,如果未能解决你的问题,请参考以下文章