替换文本中的大小写格式的单词

时间:2014-05-29 09:23:02

标签: sql sql-server text string-formatting

我有一个文字,例如This is a test text hello world

我有一些带有案例格式的单词列表,例如HeLLOWORLDTEST(我有26,000个单词列表,表格格式在表格中)
我想知道如果文本中出现任何单词,如何用文本格式的单词列表替换文本中的单词。

例如,处理后的上述字符串的输出将为This is TEST text HeLLO WORLD

我知道如何检查字符串是否包含单词:

if CHARINDEX('ME',@mainString) > 0
begin
    --do something
end

我也知道如何替换字符串中的单词

REPLACE(Column1,'hello','HeLLO')

如果我们在文本中列出了数千个要替换的单词,我想知道如何应用这个?

2 个答案:

答案 0 :(得分:0)

在谷歌搜索后写下了SP:

ALTER PROCEDURE PROC_FormatText
@TXT NVARCHAR(MAX)
AS
BEGIN
    SELECT @TXT = 
    CASE WHEN @TXT LIKE CONCAT('% ',Creator,' %')
    THEN
        REPLACE(@TXT, Creator, Creator)
    ELSE
        @TXT
    END
    FROM [CreatorsList];

    SELECT @TXT;
END

答案 1 :(得分:0)

一个简单的解决方案(来自Here)是选择替换为变量:

<强>设置

Create Table Replacements
(
    Initial Varchar(100) Not Null,
    Replacement Varchar(100) Not Null
)

Insert into Replacements (Initial, Replacement) Values ('hello', 'HeLLO')
Insert into Replacements (Initial, Replacement) Values ('world', 'WORLD')
Insert into Replacements (Initial, Replacement) Values ('test', 'TEST')

<强>替换

DECLARE @Val varchar(250) = 'This is a test text hello world'

SELECT @Val = REPLACE(@Val, Initial, Replacement)
FROM Replacements

SELECT @Val --This is a TEST text HeLLO WORLD

NB: Sql替换可能不区分大小写(取决于您认为的排序规则)。如果是这种情况,则TEST,test,TeST和TEst(等)都被认为与'test'匹配。所以这些都将转换为大写的TEST