SQL UPPER只是特定的单词

时间:2013-06-18 13:28:46

标签: sql sql-server sql-server-2008

有谁知道如何只更改数据库中varchar字段中的单词?它们的格式类似于“奶酪”,“奶酪”,“CheesE”。我想把它们全部改为CHEESE,但我在这些领域也有其他文字。我想知道他们是否是一种方法来单独说出这个词并让它变得更好。

这样的东西
update table
set field = Upper(cheese)+rest of field

由于

2 个答案:

答案 0 :(得分:7)

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

SQLFIddle demo

答案 1 :(得分: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

我确信通过解析char-by-char表达式可以做到这一点,但我想用XML尝试:)