2013-10-29 213 views
0

這個問題是關於SQL Server 2005的。我有2個UDF,1在包含2列的國家/地區代碼表上查找; 「代碼」包含一個國家的縮寫和「姓名」,其中包含國家的名稱。這兩個UDF都會傳遞一個地址,然後根據字符串與分割字符串的UDF分開進行查找。SQL REPLACE語句不會返回子查詢的預期結果

例如:

SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000') 

返回 「菲」 和

SELECT dbo.GetCountryCode('SAMPALOC MANILA PHILIPPINES 1000') 

返回 「PH」。

這些完美的工作,但是當我在使用它們REPLACE語句:

SELECT REPLACE(('SAMPALOC MANILA PHILIPPINES 1000'), 
(SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000')), 
(SELECT dbo.GetCountryCode('SAMPALOC MANILA PHILIPPINES 1000'))) 

我得到「桑帕洛克菲律賓馬尼拉1000」,什麼我需要它是爲「桑帕洛克MANILA PH 1000」。我需要在整個地址的長度大於60的情況下執行此操作。

我不知道爲什麼在REPLACE語句中放置此操作會導致此操作失敗。有沒有其他人遇到這個問題,或者有任何想法,爲什麼會發生這種情況?

+1

確定'GetCountryName' UDF不會返回一個尾隨空格的值嗎?可能'char'數據類型而不是'varchar'? –

+0

是的,@Martin是正確的。如果函數返回你提到的值,那麼替換函數按需要工作。 – Deepshikha

+0

是的,事實就是這樣。 UDF正在返回尾部空格。替換功能現在正常工作。謝謝。 – kdejarnet

回答

0

在LTRIM和RTRIM函數中封裝了UDF中的返回變量。問題解決了。