Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL REPLACE语句未返回子查询的预期结果_Sql_Sql Server 2005 - Fatal编程技术网

SQL REPLACE语句未返回子查询的预期结果

SQL REPLACE语句未返回子查询的预期结果,sql,sql-server-2005,Sql,Sql Server 2005,此问题与SQL Server 2005有关。我有2个UDF,1个用于查找包含2列的国家代码表;包含国家缩写的“代码”和包含国家名称的“名称”。这两个UDF都会被传递一个地址,并根据被拆分字符串的UDF拆分的字符串进行查找 例如: SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000') 返回“菲律宾”和 返回“PH” 它们工作得很好,但当我在REPLACE语句中使用它们时: SELECT REPLACE(('SAMPALOC M

此问题与SQL Server 2005有关。我有2个UDF,1个用于查找包含2列的国家代码表;包含国家缩写的“代码”和包含国家名称的“名称”。这两个UDF都会被传递一个地址,并根据被拆分字符串的UDF拆分的字符串进行查找

例如:

SELECT dbo.GetCountryName('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')))
我得到“SAMPALOC马尼拉菲律宾1000”,我需要的是“SAMPALOC马尼拉PH 1000”。如果地址作为一个整体的长度大于60,我需要这样做


我不知道为什么把它放在REPLACE语句中会导致它失败。是否有其他人遇到过这种情况或知道发生这种情况的原因?

将我的返回变量封装在LTRIM和RTRIM函数的UDF中。问题已解决。

确保
GetCountryName
UDF未返回带尾随空格的值?可能是
char
数据类型而不是
varchar
?是的,@Martin是正确的。如果函数返回您提到的值,那么replace函数将按要求工作。是的,这正是它的工作原理。UDF返回了尾随空格。更换功能现在工作正常。谢谢
SELECT REPLACE(('SAMPALOC MANILA PHILIPPINES 1000'),
(SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000')),  
(SELECT dbo.GetCountryCode('SAMPALOC MANILA PHILIPPINES 1000')))