排序规则的应用
对于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

浙公网安备 33010602011771号