Regex 用于消除复制字符的SQL Server函数
我想知道在SQLServer2005中是否有一种简单有效的方法来消除字符串中的复制字符。喜欢转换Regex 用于消除复制字符的SQL Server函数,regex,sql-server-2005,string,Regex,Sql Server 2005,String,我想知道在SQLServer2005中是否有一种简单有效的方法来消除字符串中的复制字符。喜欢转换 'ABBBCDEEFFFFG' to 'ABCDEFG' SQL Server的字符串库太差了,而且没有现成的regexp功能,这真是太糟糕了。您可以使用SQL Server 2005/2008中内置的CLR功能通过.NET代码来完成这项工作 MSDN杂志在他们的一期中写到了这一点 如果这不是一个可接受的解决方案,那么UDF是否也会这样做,请注意,这比CLR解决方案慢大约两个数量级。YMMV。这似
'ABBBCDEEFFFFG' to 'ABCDEFG'
SQL Server的字符串库太差了,而且没有现成的regexp功能,这真是太糟糕了。您可以使用SQL Server 2005/2008中内置的CLR功能通过.NET代码来完成这项工作 MSDN杂志在他们的一期中写到了这一点
如果这不是一个可接受的解决方案,那么UDF是否也会这样做,请注意,这比CLR解决方案慢大约两个数量级。YMMV。这似乎适用于上面的字符串。但不是abbbdeebbbg
我知道CLR解决方案,但正如我所说的,我既不负责也无权在争议数据库中实施该解决方案 对于这个特殊的问题,我决定编写一个非常简单且有点愚蠢的循环。我担心它的速度不够快,无法储存数百万张唱片,但无论如何。。。我希望我能在应用层做这件事,但我在这里必须使用T-SQL
DECLARE @i int ; -- counter
DECLARE @input varchar(200) ;
SET @input = 'AAABCDEEFFBBBXYZSSSWWWNT'
IF LEN(@input) > 1
BEGIN
DECLARE @unduplicated varchar(200) ;
SET @unduplicated = SUBSTRING(@input,1,1) ;
SET @i = 2 ;
WHILE @i <= LEN(@input)
BEGIN
-- If current char is different from the last char, concatenate, else not
IF SUBSTRING(@unduplicated, LEN(@unduplicated), 1) <> SUBSTRING(@input, @i, 1)
SET @unduplicated = @unduplicated + SUBSTRING(@input, @i, 1) ;
SET @i = @i + 1;
END
END
SELECT @unduplicated AS unduplicated;
它确实有CLR函数支持,它支持正则表达式。是的,但我不想麻烦C或VB.Net,编译和部署它等等。此外,我在这个特定数据库中的用户角色只是查询,我没有开发人员权限。
DECLARE @i int ; -- counter
DECLARE @input varchar(200) ;
SET @input = 'AAABCDEEFFBBBXYZSSSWWWNT'
IF LEN(@input) > 1
BEGIN
DECLARE @unduplicated varchar(200) ;
SET @unduplicated = SUBSTRING(@input,1,1) ;
SET @i = 2 ;
WHILE @i <= LEN(@input)
BEGIN
-- If current char is different from the last char, concatenate, else not
IF SUBSTRING(@unduplicated, LEN(@unduplicated), 1) <> SUBSTRING(@input, @i, 1)
SET @unduplicated = @unduplicated + SUBSTRING(@input, @i, 1) ;
SET @i = @i + 1;
END
END
SELECT @unduplicated AS unduplicated;
unduplicated
ABCDEFBXYZSWNT