CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
CHARINDEX('Zhang', 'Devil_Zhang')
这个函数命令将返回在“Devil_Zhangr”中“Zhang”的起始位置,在这个例子中,CHARINDEX函数将返回“Z”在“Devil_Zhang”中的位置7。
接下来,我们看这个CHARINDEX命令:
CHARINDEX('zhangsns', 'Devil_Zhang')
在这个例子中,CHARINDEX返回0,因为字符串“zhangsns” 不能在“Devil_Zhang”中被找到。
此时,我们再尝试一下CharIndex中的第三个参数【start_location】,如下:
CHARINDEX('zhang', 'Devil_Zhang')----->7
CHARINDEX('zhang', 'Devil_Zhang',9)------>0
【因为设置了被查字符串的起始位置为9,即“ang",所以,返回的是0】
需要注意的是:
1、如果 expression1 或 expression2 之一是 Unicode 数据类型(nvarchar 或 nchar)而另一个不是,则将另一个转换为 Unicode 数据类型。CHARINDEX 不能与 text、ntext 和 image 数据类型一起使用。
2、如果 expression1 或 expression2 之一为 NULL,并且数据库兼容级别为 70 或更高,则 CHARINDEX 将返回 NULL。如果数据库兼容级别为 65 或更低,则 CHARINDEX 将仅在 expression1 和 expression2 都为 NULL 时才返回 NULL 值。
3、如果在 expression2 内找不到 expression1,则 CHARINDEX 返回 0。
4、返回的开始位置从 1 开始,而非从 0 开始。
5、查找的字符和被查的字符是不区分大小写的。
针对下句:
SELECT CHARINDEX ( 'Test', 'Das ist ein Test' COLLATE Latin1_General_BIN);
【CHARINDEX 将根据输入的排序规则执行比较操作。若要以指定排序规则进行比较,则可以使用 COLLATE 将显式排序规则应用于输入值。】
来源:https://www.cnblogs.com/A2008A/archive/2011/03/11/1981116.html