2014-09-22 247 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 
相關問題