【问题标题】:TSQL Replace Doubled CharactersTSQL 替换双字符
【发布时间】:2016-02-18 08:29:12
【问题描述】:

假设我有数据:

heloo
cuube
triniity

如何编写脚本以仅用一个字符替换那些“加倍”字符?所以上述数据集的结果是:

helo
cube
trinity

通常我会发布一些我试图实现这一点的脚本,但这次我想不出来。

【问题讨论】:

  • 这个虚构的脚本应该如何知道加倍的字符是否实际上是要删除的,或者它们是否是正确拼写单词的合法组成部分?需要它的上下文是什么?因为听起来,如果可能的话,您最好使用预先存在的拼写检查库,它可能最好放在不同的应用层/语言中。
  • 翻倍的都应该换掉,没有例外。
  • 那么很容易概念化。对于字符串中的每个字符,如果该字符是第一个字符,或者不等于前一个字符,则将此字符添加到单独的“更正字符串”变量的末尾。这也将处理三元组及更高,所以如果你想要别的东西,最好指定。

标签: tsql replace sql-server-2014


【解决方案1】:

这应该可行:

CREATE PROCEDURE remove_duplicate_characters(@string VARCHAR(100)) 
AS
DECLARE @result VARCHAR(100) 

SET @result=''
SELECT @result=@result+MIN(SUBSTRING(@string ,number,1)) FROM
(     
    SELECT number FROM master..spt_values WHERE type='p' AND number BETWEEN 1 AND len(@string )) AS t GROUP BY SUBSTRING(@string,number,1) ORDER BY MIN(number)
)

SELECT @result  
GO

然后你可以这样称呼它:

EXEC remove_duplicate_characters 'heloo'

Source

【讨论】:

    【解决方案2】:

    此脚本不依赖于对主函数的访问,仅依赖于 t-sql 字符串函数。

    declare @word varchar(100) = 'aaaacuuuuuubeeeee', @result varchar(100) = ''
    declare @letter char, @idx int = 0, @lastletter char = ''
    
    while(@idx <= len(@word))
    begin
        select @letter = substring(@word,@idx,1)
        if (@letter != @lastletter)
        begin
            select @result = concat(@result,@letter)
        end
        select @lastletter = @letter,@idx = @idx + 1
    end
    
    select @result
    

    【讨论】:

    • 谢谢。因为这对我来说更具教育意义,所以我更喜欢这个解决方案。
    猜你喜欢
    • 2015-03-27
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2014-12-11
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多