现在的位置: 首页 > 综合 > 正文

排序规则的应用

2014年07月28日 ⁄ 综合 ⁄ 共 2184字 ⁄ 字号 评论关闭

对于char、nchar、varchar、nvarchar类型的列,可以指定Windows或SQL排序规则。

--显示SQL Server实例的默认的排序规则
select SERVERPROPERTY('Collation') --显示:Chinese_PRC_CI_AS

--显示数据库默认的排序规则
select DATABASEPROPERTYEX('master','Collation')  --显示:Chinese_PRC_CI_AS

--获取友好的信息,显示排序规则到底是什么意思
select description
from sys.fn_helpcollations()
where name = 'Chinese_PRC_CI_AS'

那么排序规则有什么应用?

create table test(v varchar(100) )

INSERT into test(v)
values('你'),
      ('我'),
      ('他'),
      ('握'),
      ('喔')


--1.查询排序规则的name
select name,description
from sys.fn_helpcollations()
where name like '%Chinese_PRC%'


--2.按照文字的拼音来排序,区分4个不同的声调
--2.1按照默认的排序规则排序:Chinese_PRC_CI_AS
select *
from test 
order by v

--2.2按照Chinese_PRC_CS_AI排序,与默认的Chinese_PRC_CI_AS效果一样,
--因为AI这里是不区分重音,而不是不区分声调
SELECT * 
FROM test 
ORDER BY v COLLATE Chinese_PRC_CS_AI


--2.3按照二进制排序
select v,CAST(v as varbinary)
from test
order by v collate Chinese_PRC_BIN 

注意,Chinese_PRC_CI_AS的描述Chinese-PRC, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive。

create table tone
(
	--文字对应的拼音的第一个字母
	v nvarchar(1),   

	--音调的开始,如:喔,是第一声
	tone_start nvarchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS, 

	--音调的结束,如:握,是第四声
	tone_end nvarchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS  
)
  
INSERT into tone(v,tone_start,tone_end) 
values('A',N'吖',N'鏊'),
      ('B',N'八',N'簿'),
      ('C',N'嚓',N'错'),
      ('D',N'哒',N'跺'),
      ('E',N'屙',N'贰'),
      ('F',N'发',N'馥'),
      ('G',N'旮',N'过'),
      ('H',N'铪',N'蠖'),
      ('J',N'丌',N'竣'),
      ('K',N'咔',N'廓'),
      ('L',N'垃',N'雒'),
      ('M',N'妈',N'穆'),
      ('N',N'拿',N'糯'),      
      ('O',N'噢',N'沤'),
      ('P',N'趴',N'曝'),
      ('Q',N'七',N'群'),
      ('R',N'蚺',N'箬'),
      ('S',N'仨',N'锁'),
      ('T',N'他',N'箨'),
      ('W',N'哇',N'鋈'),
      ('X',N'夕',N'蕈'),
      ('Y',N'丫',N'蕴'),
      ('Z',N'匝',N'做')


--返回文字拼音的第一个字母
select tone.v,            --拼音的首字母
       a.v,               --文字
       tone.tone_start,   --拼音对应的第一声
       tone.tone_end      --拼音对应的第四声 
from
(
	values('你'),
		  ('我'),
		  ('他'),
		  ('握'),
		  ('喔')
)a(v)   
inner join tone
        on a.v >= tone.tone_start and
           a.v <= tone.tone_end

 

create table tone
(
	--文字对应的拼音的第一个字母
	v nvarchar(10),   

	--音调的开始,如:喔,是第一声
	tone_start nvarchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS, 

	--音调的结束,如:握,是第四声
	tone_end nvarchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS  
)

--需要添加很多拼音和文字音调的对应关系  
INSERT into tone(v,tone_start,tone_end) 
values('ni',N'妮',N'腻'),       
      ('ta',N'他',N'踏'),    
      ('wo',N'莴',N'握')
     


--返回文字的拼音
select tone.v,            --拼音的字母
       a.v,               --文字
       tone.tone_start,   --拼音对应的第一声
       tone.tone_end      --拼音对应的第四声 
from
(
	values('你'),   --返回:ni
		  ('我'),   --返回:wo
		  ('他'),   --返回:ta
		  ('握'),   --返回:wo
		  ('喔')    --返回:wo
)a(v)   
inner join tone
        on a.v >= tone.tone_start and
           a.v <= tone.tone_end
                 

 

 

 

 

抱歉!评论已关闭.