日期:2014-05-16 浏览次数:20827 次
利用排序规则解决特殊字符的查找问题
http://topic.csdn.net/u/20080317/17/55e464a2-f40a-43a8-9f94-21be297a52fb.html?1084261463
select CharIndex('_@_',N'RoleName_@_゛戀戰℡帝王')
为什么这个输出不是9,而是0啊.而且
select CharIndex('_@_',N'RoleName_@_戀戰℡帝王')这样就是正常的输出9,两种就是多了一个特殊字符而已啊
-------------------------
select
CharIndex('_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN),
CharIndex('_@_',N'RoleName_@_戀戰℡帝王' COLLATE Chinese_PRC_BIN)
select
CharIndex('_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE SQL_Latin1_General_CP437_BIN),
CharIndex('_@_',N'RoleName_@_戀戰℡帝王' COLLATE SQL_Latin1_General_CP437_BIN)
--> 查找排序规则:
select top 1 * from ::fn_helpcollations() where name like '%BIN'
--> 二进制排序是区分大小写的:
select
CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN),
CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_BIN)
--> 如果要不区分大小写:
select
CharIndex('e_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI),
CharIndex('E_@_',N'RoleName_@_゛戀戰℡帝王' COLLATE Chinese_PRC_CI_AI)
--> 查找排序规则:
select top 1 * from ::fn_helpcollations() where name like '%CI%AI%'
在各种处理中应用排序规则的示例
--转自邹键
--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO
ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO
/*====================================*/
--2. 为表中的列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO
ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO
ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO
/*====================================*/
--3. 为字符变量和参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'
--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a=@b
--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a<>@b
排序规则在拼音处理中的应用
--1. 按拼音排序
DECLARE @t TABLE(col varchar(2))
INSERT @t SELECT '中'
UNION ALL SELECT '国'
UNION ALL SELECT '人'
SELECT * FROM @t ORDER BY col COLLATE Chinese_PRC_CS_AS_KS_WS
/*--结果
col
----
国
人
中
--*/
GO
/*==========================================*/
--2. 汉字首字母查询处理用户定义函数
CREATE FUNCTION f_GetPY(@st