可能它是重复的,但我无法找到解决方案。
要求:
我有以下字符串:
Heelloo
Heeelloo
Heeeelloo
Heeeeeelloo
Heeeeeeeelloo
.
.
.
Heeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeelloo
预期输出: Hello
在SQL中实现此目的的最佳方法是什么?
我正在使用的版本 :
Microsoft SQL Server 2012 - 10.0.7365.0 (X64) Jul 28 2015 00:39:54 Copyright (c)
Microsoft Corporation Parallel Data Warehouse (64-bit) on Windows NT 6.2 <X64>
(Build 9200: )
答案 0 :(得分:11)
有一个很好的技巧可以删除单个字母的重复项:
$con
这确实需要两个不在字符串中的字符(&#34;&lt;&#34;和&#34;&gt;&#34;)(或者更具体地说,不在彼此相邻的字符串中) )。特定字符并不重要。
这是如何运作的?
select replace(replace(replace(col, 'e', '<>'
), '><', ''
), '<>', 'e'
)
答案 1 :(得分:2)
基于
T-SQL String Manipulation Tips and Techniques, Part 1,特别是Replacing Multiple Contiguous Spaces With a Single Space and idea of Peter Larsson, a SQL Server MVP
部分:
然后,解决方案涉及三个步骤(假设令牌是〜):
- 每次出现@str时更换@str &#39; (空格)用&#39;〜&#39; (令牌加空格)。
- 在上一步的结果中替换每次出现的&#39; 〜&#39; (空格加令牌)与&#39;&#39; (一个空字符串)。
- 每次出现&#39;〜&#39; (令牌加空格)&#39; &#39; (空间)。
醇>
CREATE TABLE #tab(val NVARCHAR(100));
INSERT INTO #tab
SELECT 'Hello'
UNION ALL SELECT 'Heello'
UNION ALL SELECT 'Heeello'
UNION ALL SELECT 'Heeeello'
UNION ALL SELECT 'Heeeeeello'
UNION ALL SELECT 'Heeeeeeeello'
UNION ALL SELECT 'Heeeeeeeeeello';
-- version for one vowel(it can be enhanced to handle other if needed)
SELECT val,
cleaned = REPLACE(
REPLACE(
REPLACE(
REPLACE(REPLACE(val, REPLICATE('e', 8), '^^')
, 'e', '~ ')
, ' ~', '')
, '~ ', 'e')
,'^^','ee')
FROM #tab;
的 LiveDemo
强>
输出:
╔════════════════╦═════════╗
║ val ║ cleaned ║
╠════════════════╬═════════╣
║ Hello ║ Hello ║
║ Heello ║ Hello ║
║ Heeello ║ Hello ║
║ Heeeello ║ Hello ║
║ Heeeeeello ║ Hello ║
║ Heeeeeeeello ║ Heello ║
║ Heeeeeeeeeello ║ Heeello ║
╚════════════════╩═════════╝
答案 2 :(得分:1)
尝试此用户定义的功能:
CREATE FUNCTION TrimDuplicates(@String varchar(max))
RETURNS varchar(max)
AS
BEGIN
while CHARINDEX('ee',@String)>0 BEGIN SET @String=REPLACE(@String,'ee','e') END
while CHARINDEX('oo',@String)>0 BEGIN SET @String=REPLACE(@String,'oo','o') END
RETURN @String
END
示例用法:
select dbo.TrimDuplicates ('Heeeeeeeelloo')
返回Hello