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

时间:2020-03-06 14:31:50  来源:igfitidea点击:

为了对SQL Server 2000/2005数据库中的表执行区分大小写的搜索/替换,必须使用正确的排序规则。

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

解决方案

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'

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

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

`select charindex('RESULT','如果结果为0,则表示我们区分大小写。')

结果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

这将匹配并替换'THECONTENT',而不是'TheContent'或者'thecontent'`。

首先检查一下:
http://technet.microsoft.com/zh-cn/library/ms180175(SQL.90).aspx

我们将看到CI指定不区分大小写,而CS指定不区分大小写。

另外,这可能很有用。
从fn_helpcollat​​ions()选择*,这将获取服务器支持的所有排序规则。
从sys.databases中选择*,这里有一列指定服务器上的每个数据库具有什么排序规则。

我们可以在每次查询表时指定排序规则,也可以通过更改表将排序规则永久应用于列。

如果确实选择执行查询方法,则还包括不区分大小写的搜索参数的好处。如果包含它们,我们将看到SQL将选择一个更有效的执行计划。例如:

SELECT testColumn FROM testTable 
    WHERE testColumn COLLATE Latin1_General_CS_AS = 'eXaMpLe' 
    and testColumn = 'eXaMpLe'