2014-09-22 205 views
1

我的字符串值如下所述。删除字符串中最后一个空格后的最后一个字符

字符串值:

乔治,马特Ĵ

兰布拉,托尼G.

预期输出:

乔治,马特

兰布拉,托尼

我需要修剪像上面提到的信件。谁能帮我这个?

我实现了在SQL Server相同的由下面的查询

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

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

我怎么能在MS Access实现这一目标?

我尝试了这些,并不能帮助

第1种方法

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

第2种方法

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

啥子你说的“在访问”是什么意思?在Access VBA或Access SQL中? – 2014-09-22 13:19:25

+0

我需要在Access SQL中。 – Learner 2014-09-22 13:23:17

+2

'Left([ColumnName],InStrRev([ColumnName],“”) - 1)'适用于我。请解释它为什么“没有帮助”!您的查询是“真正的”Access查询还是Pass-Through查询? – 2014-09-22 13:30:18

回答

3

从您的意见已经很清楚的问题你面对的是要检测是否有多少角色在最后被删除。既然你在不测试字符的情况下删除字符,那么你的SQL-Server和Access-SQL解决方案都不会起作用!更糟的是,如果Column为空或者不包含任何空格字符,那么你甚至可能会得到一个异常。

我建议创建一个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 
0
Trim(Left([columnname] & " ",InStr(1+InStr([columnname] & " "," "),[columnname] & " "," "))) 

注意双空间每个&后 - 这可确保总有至少2位在搜索领域。

0

试试这个以消除串

DECLARE @string AS VARCHAR(100)='First Second Third' 

select LEFT(@string, LEN(@string) - CHARINDEX(' ', REVERSE(@string))) 

这会给你最后一个空格字符之后的所有内容:

First Second 
相关问题