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

本文关键字:字符串 字符 范围内 server 替换 SQL | 更新日期: 2023-09-27 18:27:21

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

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

这个replace语句运行良好。然而,最困难的部分我想实现。假设第一个导入文件中的一列具有如下部件号:

132105213.000
452993424.001
436345332.002
etc...

第二个导入的文件有相同的零件号,只是它们看起来像这样:

132.105.213.000
452.993.424.001
436.345.332.002
etc...

为了改进这两列之间的比较,我只想去掉前两个点,留下第三个点。因此REPLACE事务应该只在字符4到8上执行。有什么方法可以在服务器端做到这一点吗?

需要考虑的一些事项:

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

如果需要更多信息,请在下面发表评论,这样我就可以编辑我的问题了!

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

我不理解你对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))之间的字符串,然后对该提取执行替换,并将剩下的内容填充回原始字符串中。

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

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

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

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), '.', ''));

再次感谢您帮助这位实习生!