2012-10-03 63 views
0

爲什麼不能正常工作?這是一個字符集問題或什麼?這真讓我抓狂。我一直在尋找。也許這只是其中的一個。 :(更新單字符通配符不起作用

select replace('Doe, John B ',' _ ','') 

預期結果: 「李四,約翰」

實際結果: 「李四,約翰·B」

如果這是不可能的replace,還能怎麼我實現這個結果?

+0

什麼是'字符集()'?在最後缺少'''''? – Kermit

+0

@njk這是一個意外。它是固定的。 – Chiramisu

回答

1

對於剛剛這個變量:

select 
rtrim(reverse(substring(reverse(rtrim('Doe, John B ')), charindex(' ', reverse(rtrim('Doe, John B '))), len(rtrim('Doe, John B '))))) 

對於整個表:

select 
rtrim(reverse(substring(reverse(rtrim(columnname)), charindex(' ', reverse(rtrim(columnname))), len(rtrim(columnname))))) 
from tablename 
where columnname like '% _ ' 
+0

我無法看到所有反轉的點是什麼。照顧開導我? :P – Chiramisu

+0

獲取字符串中空格字符的最後一個索引(修剪尾部空格後)。 – d89761

+1

基本上,修剪尾部空格,然後將其倒轉以獲取空間的第一個(最後一個當它是向前)實例時,從那裏做一個子串,然後按照正確的順序將其返回。 – d89761

2

REPLACE函數不接受模式/通配符在SQL Server

+0

如果'replace'不能做到這一點,我怎麼能實現我的目標?謝謝。 :) – Chiramisu

+0

你說它不接受模式也很奇怪,因爲[微軟在API]中的定義(http://msdn.microsoft.com/en-us/library/ms186862.aspx)具有「模式「作爲函數的參數。 – Chiramisu

+0

是的,參數的名稱是「字符串模式」。當您閱讀參數的描述時,它會顯示「是否找到子字符串」。 –