最近学习sql server 的时候发现在创建表的时候用到了“排序规则”。其实,究竟这个排序规则究竟有什么用途?加了排序规则与不加有什么区别?平常我用T_SQL语言建立基本表的时候都没用过“排序规则”!有哪位高手帮我讲解讲解!
最好加上实讲解,这样比较好理解!
[b]谢谢啦!![/b]
------解决方案--------------------
利用排序规则解决特殊字符的查找问题
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(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @py TABLE(
ch char(1),
hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
INSERT @py SELECT 'A',N'吖',N'鏊'
UNION ALL SELECT 'B',N'八',N'簿'
UNION ALL SELECT 'C',N'嚓',N'错'
UNION ALL SELECT 'D',N'哒',N'跺'
UNION ALL SELECT 'E',N'屙',N'贰'
UNION ALL SELECT 'F',N'发',N'馥'
UNION ALL SELECT 'G',N'旮',N'过'
UNION ALL SELECT 'H',N'铪',N'蠖'
UNION ALL SELECT 'J',N'丌',N'竣'
UNION ALL SELECT 'K',N'咔',N'廓'
UNION ALL SELECT 'L',N'垃',N'雒'
UNION ALL SELECT 'M',N'妈',N'穆'
UNION ALL SELECT 'N',N'拿',N'糯'
UNION ALL SELECT 'O',N'噢',N'沤'
UNION ALL SELECT 'P',N'趴',N'曝'
UNION ALL SELECT 'Q',N'七',N'群'
UNION ALL SELECT 'R',N'蚺',N'箬'
UNION ALL SELECT 'S',N'仨',N'锁'
UNION ALL SELECT 'T',N'他',N'箨'
UNION ALL SELECT 'W',N'哇',N'鋈'
UNION ALL SELECT 'X',N'夕',N'蕈'
UNION ALL SELECT 'Y',N'丫',N'蕴'
UNION ALL SELECT 'Z',N'匝',N'做'
DECLARE @i int
SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
WHILE @i>0
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
FROM @py
WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
RETURN(@str)
END
GO
------解决方案--------------------
http://www.cnblogs.com/starluck/articles/1968883.html