我想比较SQL Server中同一列中的字母数字字符串

时间:2015-04-21 11:11:40

标签: sql-server

我有一张桌子,上面有关于住在特定地区的家庭成员的详细信息。由于这些是政府数据,因此存在很多错误。就像在一列'houseno'中一样,有2个值'Ti 303'和'303'是相同的门牌号。

最后,我想要用'303'更新Ti 303。 (因为这些是住在同一所房子里的家庭成员)

类似地,'P-101'和'P / 101'是相同的houseno,我希望它被转换为'P-101'或'P / 101'。我尝试过差异,子串等,但现在对我有用。请帮忙!

2 个答案:

答案 0 :(得分:0)

您应该使用REPLACE命令。对于这两个示例,您可以按如下方式对其进行硬编码:

select REPLACE('Ti 303','Ti ','')
select REPLACE('P-101','P-','P/')

您可以在REPLACE命令中使用UPDATE,而不是SELECT。{/ p>

如果要在具有更新的列中替换要替换的字符串列表,则可以将这些字符串放入表中。然后在REPLACE命令中使用它来替换字符串模式。

答案 1 :(得分:0)

你只需要删除字符来比较内容吗?

CREATE FUNCTION dbo.FN_GetNumberPart (@strMixedString VARCHAR(200))
RETURNS VARCHAR(200)
AS
BEGIN
   DECLARE @NumberPart INT
   -- Get the next non numeric character position
   SET @NumberPart = PATINDEX('%[^0-9]%', @strMixedString)
   -- While there are non numeric characters remaining
   WHILE @NumberPart > 0
      BEGIN
      -- Remove the non numeric character from the string 
      SET @strMixedString = STUFF(@strMixedString, @NumberPart , 1, '' )
      -- Get the next non numeric character position
      SET @NumberPart = PATINDEX('%[^0-9]%', @strMixedString)
   END
   -- Spit out the cleansed string
   RETURN ISNULL(@strMixedString,0)
END
GO

SELECT dbo.FN_GetNumberPart(HouseNo) 
from TblAddresses