本文主要是介绍T9输入法在SQL Server2005 中的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Create table NumberToChar -- --------用来保存数字和字母之间映射的表
(
number int ,
GetText varchar ( 10 )
)
(
number int ,
GetText varchar ( 10 )
)
-- 字典表
select * from Dictionary
-- 联系人表
select * from Contact
-- 创建键盘表---------------------------------------------------------------------------------
create table Keys
(
alpha char ( 1 ) primary key ,
digit char ( 1 ) ,
)
insert into Keys(alpha, digit) values ( ' a ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' b ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' c ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' d ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' e ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' f ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' g ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' h ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' i ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' j ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' k ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' l ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' m ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' n ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' o ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' p ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' q ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' r ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' s ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' t ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' u ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' v ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' w ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' x ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' y ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' z ' , ' 9 ' );
select * from Keys
-- 创建联系人T9码速查表------------------------------------------------------------------
create table ContactT9Info
(
id int not null REFERENCES Contact(id),
T9Code varchar ( 100 ) not null ,
PRIMARY KEY CLUSTERED (id, T9Code)
)
select * from ContactT9Info
-- 函数:取得汉字的拼音---------------------------------------------------------------------
select dbo.getPY( ' 黄 ' )
create function getPY( @word varchar ( 5 ))
returns varchar ( 10 )
as
begin
declare @py varchar ( 10 )
set @py = ( select top 1 py from dictionary
where words like ' % ' + @word + ' % ' )
return ( @py )
end
go
-- 函数:取得拼音的T9码---------------------------------------------------------------------
select dbo.getT9CodeFromPY( ' huang ' )
create function getT9CodeFromPY( @pinyin varchar ( 10 ))
returns varchar ( 10 )
as
begin
declare @i int , @length int , @alpha char ( 1 ), @code varchar ( 10 )
set @i = 1
set @length = len ( @pinyin )
set @code = ''
while ( @i <= @length )
begin
-- 对拼音的每个字母进行处理
set @alpha = substring ( @pinyin , @i , 1 )
set @code = @code + dbo.getKeyFromAlpha( @alpha )
set @i = @i + 1
end
return @code
end
go
-- 函数:取得字母的键码---------------------------------------------------------------------
select dbo.getKeyFromAlpha( ' h ' )
create function getKeyFromAlpha( @alpha char ( 1 ))
returns char ( 1 )
as
begin
return
(
select digit from Keys
where alpha = @alpha
)
end
go
-- 存储过程:执行此存储过程创建联系人T9码速查信息数据-------------------------------------------
create procedure sp_createContactT9Info
as
begin
declare @i int , @length int , @word varchar ( 5 ), @code varchar ( 100 )
declare @contactid int , @name varchar ( 20 )
-- 先清空ContactT9Info表的数据
delete from ContactT9Info
-- 声明一个游标取出contact表的数据,并打开此游标
declare contact_cursor cursor for
select id, name from contact
open contact_cursor
fetch next from contact_cursor into @contactid , @name
-- 检查@@fetch_status的值判断是否还能取得记录
while @@fetch_status = 0
begin
-- 对contact_cursor中取得的每条记录进行操作
set @length = len ( @name )
set @i = @length
set @code = ''
while ( @i >= 1 )
begin
-- 从姓名的最后一个字开始,分别对每个字进行处理
set @word = substring ( @name , @i , 1 )
set @code = dbo.getT9CodeFromPY(dbo.getPY( @word )) + @code
insert into ContactT9Info(id, T9Code) values ( @contactid , @code )
set @i = @i - 1
end
fetch next from contact_cursor into @contactid , @name
end
close contact_cursor
deallocate contact_cursor
print ' success! '
end
go
exec sp_CreateContactT9Info
-- 存储过程:通过输入T9码速查联系人----------------------------------------------------------
create procedure sp_getContactByT9
@T9Code varchar ( 100 )
as
select c. *
from Contact c
where exists (
select * from ContactT9Info i
where i.id = c.id and i.T9Code like @T9Code + ' % '
)
go
exec sp_getContactByT9 ' 264 '
-- 存储过程:显示所有联系人的信息
create procedure sp_showContactInfo
as
select c. * ,i.T9Code from Contact c
left join ContactT9Info i on c.id = i.id
go
exec sp_showContactInfo
select * from Dictionary
-- 联系人表
select * from Contact
-- 创建键盘表---------------------------------------------------------------------------------
create table Keys
(
alpha char ( 1 ) primary key ,
digit char ( 1 ) ,
)
insert into Keys(alpha, digit) values ( ' a ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' b ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' c ' , ' 2 ' );
insert into Keys(alpha, digit) values ( ' d ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' e ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' f ' , ' 3 ' );
insert into Keys(alpha, digit) values ( ' g ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' h ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' i ' , ' 4 ' );
insert into Keys(alpha, digit) values ( ' j ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' k ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' l ' , ' 5 ' );
insert into Keys(alpha, digit) values ( ' m ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' n ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' o ' , ' 6 ' );
insert into Keys(alpha, digit) values ( ' p ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' q ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' r ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' s ' , ' 7 ' );
insert into Keys(alpha, digit) values ( ' t ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' u ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' v ' , ' 8 ' );
insert into Keys(alpha, digit) values ( ' w ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' x ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' y ' , ' 9 ' );
insert into Keys(alpha, digit) values ( ' z ' , ' 9 ' );
select * from Keys
-- 创建联系人T9码速查表------------------------------------------------------------------
create table ContactT9Info
(
id int not null REFERENCES Contact(id),
T9Code varchar ( 100 ) not null ,
PRIMARY KEY CLUSTERED (id, T9Code)
)
select * from ContactT9Info
-- 函数:取得汉字的拼音---------------------------------------------------------------------
select dbo.getPY( ' 黄 ' )
create function getPY( @word varchar ( 5 ))
returns varchar ( 10 )
as
begin
declare @py varchar ( 10 )
set @py = ( select top 1 py from dictionary
where words like ' % ' + @word + ' % ' )
return ( @py )
end
go
-- 函数:取得拼音的T9码---------------------------------------------------------------------
select dbo.getT9CodeFromPY( ' huang ' )
create function getT9CodeFromPY( @pinyin varchar ( 10 ))
returns varchar ( 10 )
as
begin
declare @i int , @length int , @alpha char ( 1 ), @code varchar ( 10 )
set @i = 1
set @length = len ( @pinyin )
set @code = ''
while ( @i <= @length )
begin
-- 对拼音的每个字母进行处理
set @alpha = substring ( @pinyin , @i , 1 )
set @code = @code + dbo.getKeyFromAlpha( @alpha )
set @i = @i + 1
end
return @code
end
go
-- 函数:取得字母的键码---------------------------------------------------------------------
select dbo.getKeyFromAlpha( ' h ' )
create function getKeyFromAlpha( @alpha char ( 1 ))
returns char ( 1 )
as
begin
return
(
select digit from Keys
where alpha = @alpha
)
end
go
-- 存储过程:执行此存储过程创建联系人T9码速查信息数据-------------------------------------------
create procedure sp_createContactT9Info
as
begin
declare @i int , @length int , @word varchar ( 5 ), @code varchar ( 100 )
declare @contactid int , @name varchar ( 20 )
-- 先清空ContactT9Info表的数据
delete from ContactT9Info
-- 声明一个游标取出contact表的数据,并打开此游标
declare contact_cursor cursor for
select id, name from contact
open contact_cursor
fetch next from contact_cursor into @contactid , @name
-- 检查@@fetch_status的值判断是否还能取得记录
while @@fetch_status = 0
begin
-- 对contact_cursor中取得的每条记录进行操作
set @length = len ( @name )
set @i = @length
set @code = ''
while ( @i >= 1 )
begin
-- 从姓名的最后一个字开始,分别对每个字进行处理
set @word = substring ( @name , @i , 1 )
set @code = dbo.getT9CodeFromPY(dbo.getPY( @word )) + @code
insert into ContactT9Info(id, T9Code) values ( @contactid , @code )
set @i = @i - 1
end
fetch next from contact_cursor into @contactid , @name
end
close contact_cursor
deallocate contact_cursor
print ' success! '
end
go
exec sp_CreateContactT9Info
-- 存储过程:通过输入T9码速查联系人----------------------------------------------------------
create procedure sp_getContactByT9
@T9Code varchar ( 100 )
as
select c. *
from Contact c
where exists (
select * from ContactT9Info i
where i.id = c.id and i.T9Code like @T9Code + ' % '
)
go
exec sp_getContactByT9 ' 264 '
-- 存储过程:显示所有联系人的信息
create procedure sp_showContactInfo
as
select c. * ,i.T9Code from Contact c
left join ContactT9Info i on c.id = i.id
go
exec sp_showContactInfo
附加一部分代码,我已经忘了是做什么用的了,看来注释确实是个好习惯
select * from NumberToChar
drop function Get_StrArrayLength
CREATE function Get_StrArrayLength
(
@str varchar ( 1024 ), -- 要分割的字符串
@split varchar ( 10 ) -- 分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str = ltrim ( rtrim ( @str ))
set @location = charindex ( @split , @str )
set @length = 1
while @location <> 0
begin
set @start = @location + 1
set @location = charindex ( @split , @str , @start )
set @length = @length + 1
end
return @length
end
drop function Get_StrArrayLength
CREATE function Get_StrArrayLength
(
@str varchar ( 1024 ), -- 要分割的字符串
@split varchar ( 10 ) -- 分隔符号
)
returns int
as
begin
declare @location int
declare @start int
declare @length int
set @str = ltrim ( rtrim ( @str ))
set @location = charindex ( @split , @str )
set @length = 1
while @location <> 0
begin
set @start = @location + 1
set @location = charindex ( @split , @str , @start )
set @length = @length + 1
end
return @length
end
这篇关于T9输入法在SQL Server2005 中的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!