1

有谁知道我如何只更改数据库中 varchar 字段中的一个单词?它们的格式类似于“Cheese”、“cheese”、“CheesE”。我想将它们全部更改为 CHEESE,但我在这些字段中也有其他文本。我想知道他们是否是一种将这个词单挑出来并使它变得更高级的方法。

就像是

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

谢谢

4

2 回答 2

7
update table
set field = replace(field, 'cheese', 'CHEESE')

SQLFiddle 演示

于 2013-06-18T13:29:49.227 回答
1

从您的评论中,我可以看到子字符串和单词之间的区别。可以使用 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 来尝试:)

于 2013-06-18T14:46:25.863 回答