SQL仅限特定单词

SQL仅限特定单词,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,有人知道我如何只更改数据库中varchar字段中的一个单词吗?它们的格式像奶酪,奶酪,奶酪。我想将它们全部改为CHEESE,但在这些字段中我还有其他文本。我想知道他们是否能把这个词挑出来,让它更流行 差不多 update table set field = Upper(cheese)+rest of field 谢谢 从你的评论中,我可以看出子字符串和单词之间的区别。 可以使用XML作为代理格式进行这种“以字为中心”的转换 试试这个 DECLARE @pattern nvarchar(max)

有人知道我如何只更改数据库中varchar字段中的一个单词吗?它们的格式像奶酪,奶酪,奶酪。我想将它们全部改为CHEESE,但在这些字段中我还有其他文本。我想知道他们是否能把这个词挑出来,让它更流行

差不多

update table
set field = Upper(cheese)+rest of field
谢谢


从你的评论中,我可以看出子字符串和单词之间的区别。 可以使用XML作为代理格式进行这种“以字为中心”的转换

试试这个

DECLARE @pattern nvarchar(max) = 'cheese'

SELECT 
    converted =
        cast('<a><i>' + REPLACE(field, ' ', '</i><i>') + '</i></a>' as xml)
            .query(
                'for $x in /a/i return
                    if (not( ($x) is (/a/i[last()])[1] )) then
                        if (data($x) = sql:variable("@pattern")) then
                            concat(upper-case($x), "")
                        else
                            concat($x, "")
                    else
                        if (data($x) = sql:variable("@pattern")) then
                            string(upper-case($x))
                        else
                            string(data($x))')
            .value('.', 'nvarchar(max)')
FROM table

我确信可以通过逐字符解析表达式来实现这一点,但我想用XML试试:

从您的评论中,我可以看出子字符串和word之间的差异。 可以使用XML作为代理格式进行这种“以字为中心”的转换

试试这个

DECLARE @pattern nvarchar(max) = 'cheese'

SELECT 
    converted =
        cast('<a><i>' + REPLACE(field, ' ', '</i><i>') + '</i></a>' as xml)
            .query(
                'for $x in /a/i return
                    if (not( ($x) is (/a/i[last()])[1] )) then
                        if (data($x) = sql:variable("@pattern")) then
                            concat(upper-case($x), "")
                        else
                            concat($x, "")
                    else
                        if (data($x) = sql:variable("@pattern")) then
                            string(upper-case($x))
                        else
                            string(data($x))')
            .value('.', 'nvarchar(max)')
FROM table

我确信可以通过逐字符解析表达式来实现这一点,但我想用XML试试:

虽然这也会导致cheesecake成为cheesecake,但我想替换这个特定的单词,而不是包含这个单词的单词。字段显示所有口味的奶酪,而不仅仅是cheEseI刚刚测试过它。它让我剩下的文字独处!太好了@juergend-您的答案替换了子字符串cheese,而不是单词cheese。在这种情况下,这可能是一个迂腐的区别,因为我想不出多少包含子字符串的单词。但对于其他字符串来说,这会有所不同。e、 g.replacefield,“rat”,“rat”会导致像separate这样的词,这也会导致cheesecake成为cheesecake。Op想替换这个特定的词,而不是包含这个词的词。field说所有口味的奶酪不仅仅是cheEse,我刚刚测试过它。它让我剩下的文字独处!太好了@juergend-您的答案替换了子字符串cheese,而不是单词cheese。在这种情况下,这可能是一个迂腐的区别,因为我想不出多少包含子字符串的单词。但对于其他字符串来说,这会有所不同。e、 g.replacefield,'rat','rat'会导致像sepaRATe这样的词