如何在SQL 2000/2005中执行区分大小写的搜索和替换?

And*_*hre 9 sql sql-server-2005 sql-server-2000 collation

若要在SQL Server 2000/2005数据库中的表上执行区分大小写的搜索/替换,您必须使用正确的排序规则.

如何确定数据库的默认排序规则是否区分大小写,如果不是,则如何执行区分大小写的搜索/替换?

blo*_*art 13

SELECT testColumn FROM testTable  
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'example' 

SELECT testColumn FROM testTable
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'EXAMPLE' 

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
Run Code Online (Sandbox Code Playgroud)

不要假设默认排序规则区分大小写,只需每次指定区分大小写(当然使用正确的语言)


And*_*hre 9

确定默认排序规则是否区分大小写,如下所示:

select charindex('RESULT', 'If the result is 0 you are in a case-sensitive collation mode')

结果为0表示您处于区分大小写的排序规则模式,8表示它不区分大小写.

如果排序规则不区分大小写,则需要在执行搜索/替换时显式声明要使用的排序规则模式.

以下是如何通过指定要使用的排序规则模式来构造UPDATE语句以执行区分大小写的搜索/替换:

update ContentTable
set ContentValue = replace(ContentValue COLLATE Latin1_General_BIN, 'THECONTENT', 'TheContent')
from StringResource
where charindex('THECONTENT', ContentValue COLLATE Latin1_General_BIN) > 0
Run Code Online (Sandbox Code Playgroud)

这将匹配和替换'THECONTENT',但不是'TheContent''thecontent'.


Sea*_*ean 7

如果你有不同的情况下,同一个词的在同一领域,而只是想更换特定的情况下,那么您可以在您使用排序REPLACE功能:

UPDATE tableName
SET fieldName = 
    REPLACE(
        REPLACE(
            fieldName COLLATE Latin1_General_CS_AS,
            'camelCase' COLLATE Latin1_General_CS_AS,
            'changedWord'
        ),
        'CamelCase' COLLATE Latin1_General_CS_AS,
        'ChangedWord'
    )
Run Code Online (Sandbox Code Playgroud)

这将导致:

This is camelCase 1 and this is CamelCase 2
Run Code Online (Sandbox Code Playgroud)

变得:

This is changedWord 1 and this is ChangedWord 2
Run Code Online (Sandbox Code Playgroud)