【发布时间】:2012-05-05 03:05:41
【问题描述】:
如果两个子字符串彼此相邻,我需要从主字符串中删除第二次出现的子字符串。例如:
Jhon\Jhon\Jane\Mary\Bob 需要结束 Jhon\Jane\Mary\Bob
但Mary\Jane\Mary\Bob 必须保持不变。
任何人都可以提出一种高效的方式来做到这一点吗?
'\'是不同名称的分隔符,可以作为要替换的子串的限制。
编辑:这是在 SELECT 语句上运行的,所以它应该是一个单行解决方案,我不能使用变量。 另外,如果名字在其他地方重复,我必须让他们在那里。如果第一个和第二个名称相同,则仅删除一个匹配项。
【问题讨论】:
-
您希望 SQL Server 执行此操作,还是希望它更快?缺少 CLR,我认为两者都做不到。您可以使用拆分 UDF 执行此操作,但在大型结果集上不会很快。我认为您最好在语言更好地支持它的客户端执行字符串操作,并且无论如何您都会在这里循环......
-
@AaronBertrand 我想要这一切! SP 的结果是发送给客户端的报告,它只是将其转换为 csv 文件,所以我不能这样做......另一方面,报告可以有 200K 行,我不知道是不是太多了……
-
@AlejoBrz 有很多优秀的 ETL 工具可以做到这一点。 SSIS 就是其中之一,它带有 SQL 服务器。将报表用作 ETL 工具并非可行之道。
-
当然,将报告输出写入 CSV 文件的任何内容也可以解析每一行并在将每一行写入文件时对其进行修改。还有你想用
Jhon\Jhon\Jhon\Jane\Mary\Bob做什么? -
@AaronBertrand 我只需要删除第一个重复的名称。它不应该出现第三次,但如果出现,我必须把它留在那里。
标签: sql-server tsql substring