SQL server:替换指定范围内的字符串中的字符

时间:2014-10-22 09:23:50

标签: c# sql-server

我有一个关于替换字符串中特定位置的字符的问题。我的c#应用程序能够读取文件,例如:TXT,CSV,Excel,数据库等,并将它们导入网络上的SQL服务器(用户可以选择我们导入文件的服务器)。该应用程序用于将两个导入的文件相互比较。为了改善两个表之间的比较,我希望能够替换一些特定的字符。举个例子。第一个导入文件中的一列包含没有任何特殊字符的部件号。第二个导入的文件也有一个与第一个导入文件具有相同编号的列,只有那些部分编号在每个第三个字符上用一个点分隔。为了改善搜索,我删除了第二个导入文件中的所有点。这可以通过REPLACE交易轻松完成。查询(从我的c#应用程序中提取,我不想创建存储过程,因为服务器可以由用户选择更改)将如下所示:

UPDATE myTable SET myColumn = REPLACE(myColumn , '.', '');

这个替换声明工作得很好。然而,我想要实现的困难部分。假设第一个导入文件中的列具有如下所示的partnumbers:

132105213.000
452993424.001
436345332.002
etc...

并且第二个导入的文件具有相同的partnumbers,它们看起来像这样:

132.105.213.000
452.993.424.001
436.345.332.002
etc...

为了改善这两列之间的比较,我只想删除FIRST TWO点并留下第三个点。所以REPLACE transact只能在字符4到8上执行。有没有办法在服务器端执行此操作?

需要考虑的一些事项:

  • 我不想使用STUFF事务,因为一行中的每个字符串可能彼此不同而且搞乱了替换。
  • 用户正在指定应在其上执行REPLACE事务处理的范围。例如。用户从字符位置4到位置8进入替换。
  • 优选地,不进行存储过程,因为比较服务器可以根据用户的选择而不同。
  • 最好从SQL Version 2005及更高版本开始。绝对最低版本将是SQL Server 2008。

如果需要更多信息,请在下方发表评论,以便我可以编辑我的问题!

3 个答案:

答案 0 :(得分:1)

我不理解您对STUFF的逆境,以下情况似乎可以正常工作:

DECLARE @Start INT = 4,
        @End INT = 9,
        @Replace NCHAR(1) = '.';

SELECT  s = STUFF(t.String, 
                @Start,
                @End - @Start,
                REPLACE(SUBSTRING(t.String, @Start, @End - @Start), @Replace, '')
                )
FROM    (VALUES
            ('132.105.213.000'),
            ('452.993.424.001'),
            ('436.345.332.002'),
            ('132105213.000'),
            ('452993424.001'),
            ('436345332.002')
        ) AS t (String);

基本上你是在指定的字符(SUBSTRING(t.String, @Start, @End - @Start))之间提取字符串,然后在这个提取上执行替换,并将剩下的内容填充到原始字符串中。

答案 1 :(得分:1)

试试这个。它将离开最后一个时期

DECLARE @t table(val varchar(50))
INSERT @t values
('132.105.213.000'),
('452.993.424.001'),
('436.345.332.002'),
('123')

SELECT replace(left(val, len(val) - len(rightval)), '.', '') + rightval
FROM @t t
OUTER APPLY
(SELECT right(val, charindex('.',reverse(val))) rightval) x

答案 2 :(得分:0)

您提供的答案帮助我找出解决方案,至少我认为这是一个很好的解决方案?这是查询的样子:

UPDATE myTable
SET myColumn = STUFF(myColumn, fromCharPosition, toCharPosition, REPLACE(SUBSTRING(myColumn, fromCharPosition, toCharPosition, charToReplace, charReplacement));

因此,对于我在问题中所做的示例,查询将如下所示:

UPDATE myTable
SET partNumber = STUFF(partNumber, 4, 8, REPLACE(SUBSTRING(partNumber, 4, 8), '.', ''));

再次感谢帮助这名受训者!