这个是可以将得到速查编码的存储过程 如 中国人 可以得到 ZGR SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO ALTER proc LOG_FindCode @strName nvarchar(20), @strFindCode nvarchar(20) output as begin declare @word nchar(1),@PY nvarchar(4000) set @PY='' while len(@strName)>0 begin set @word=left(@strName,1) set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901 then (select top 1 PY from ( select 'A' as PY,N'驁' as word union all select 'B',N'簿' union all select 'C',N'錯' union all select 'D',N'鵽' union all select 'E',N'樲' union all select 'F',N'鰒' union all select 'G',N'腂' union all select 'H',N'夻' union all select 'J',N'攈' union all select 'K',N'穒' union all select 'L',N'鱳' union all select 'M',N'旀' union all select 'N',N'桛' union all select 'O',N'漚' union all select 'P',N'曝' union all select 'Q',N'囕' union all select 'R',N'鶸' union all select 'S',N'蜶' union all select 'T',N'籜' union all select 'W',N'鶩' union all select 'X',N'鑂' union all select 'Y',N'韻' union all select 'Z',N'咗' ) T where word>=@word collate Chinese_PRC_CS_AS_KS_WS order by PY ASC) else @word end) set @strName=right(@strName,len(@strName)-1) end set @strFindCode=@PY end GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 这个是方法,只需要传进去字符串就可以得到速查编码了 public string GetFindCode(string strName) { ClassDataBase.Components.Database data=new ClassDataBase.Components.Database(); SqlParameter[] prams= { data.MakeInParam("@strName",SqlDbType.VarChar,20,strName), data.MakeOutParam("@strFindCode",SqlDbType.VarChar,20) }; data.RunProc("LOG_FindCode",prams); return prams[1].Value.ToString(); }
贴主加分吧!先建一个自定义函数: create function FuncGetFirstPY(@str nvarchar(4000)) returns nvarchar(4000) as begin declare @word nchar(1),@PY nvarchar(4000) set @PY='' while len(@str)>0 begin set @word=left(@str,1) --如果非汉字字符,返回原字符 set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901 then (select top 1 PY from ( select 'A' as PY,N'驁' as word union all select 'B',N'簿' union all select 'C',N'錯' union all select 'D',N'鵽' union all select 'E',N'樲' union all select 'F',N'鰒' union all select 'G',N'腂' union all select 'H',N'夻' union all select 'J',N'攈' union all select 'K',N'穒' union all select 'L',N'鱳' union all select 'M',N'旀' union all select 'N',N'桛' union all select 'O',N'漚' union all select 'P',N'曝' union all select 'Q',N'囕' union all select 'R',N'鶸' union all select 'S',N'蜶' union all select 'T',N'籜' union all select 'W',N'鶩' union all select 'X',N'鑂' union all select 'Y',N'韻' union all select 'Z',N'咗' ) T where word>=@word collate Chinese_PRC_CS_AS_KS_WS order by PY ASC) else @word end) set @str=right(@str,len(@str)-1) end return @PY end/***********************************************************/ 调用示例 /***********************************************************/ 表结构: CREATE TABLE [dbo].[PinYing] ( [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [old] [int] NULL ) ON [PRIMARY]数据: name old 王立平 23 立立平 24 写立平 25 陈立平 26 望立平 27 汪立平 28 长立平 29 江立平 30 黄立平 31 河立平 32测试结果: name old 王立平 23 望立平 27 汪立平 28调用调例: select * from PinYing where dbo.FuncGetFirstPY(substring(name,1,1))='W'
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER proc LOG_FindCode
@strName nvarchar(20),
@strFindCode nvarchar(20) output
as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@strName)>0
begin
set @word=left(@strName,1)
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC) else @word end)
set @strName=right(@strName,len(@strName)-1)
end
set @strFindCode=@PY
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
这个是方法,只需要传进去字符串就可以得到速查编码了
public string GetFindCode(string strName)
{
ClassDataBase.Components.Database data=new ClassDataBase.Components.Database();
SqlParameter[] prams=
{
data.MakeInParam("@strName",SqlDbType.VarChar,20,strName),
data.MakeOutParam("@strFindCode",SqlDbType.VarChar,20)
};
data.RunProc("LOG_FindCode",prams);
return prams[1].Value.ToString();
}
create function FuncGetFirstPY(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @word nchar(1),@PY nvarchar(4000)
set @PY=''
while len(@str)>0
begin
set @word=left(@str,1)
--如果非汉字字符,返回原字符
set @PY=@PY+(case when unicode(@word) between 19968 and 19968+20901
then (select top 1 PY from (
select 'A' as PY,N'驁' as word
union all select 'B',N'簿'
union all select 'C',N'錯'
union all select 'D',N'鵽'
union all select 'E',N'樲'
union all select 'F',N'鰒'
union all select 'G',N'腂'
union all select 'H',N'夻'
union all select 'J',N'攈'
union all select 'K',N'穒'
union all select 'L',N'鱳'
union all select 'M',N'旀'
union all select 'N',N'桛'
union all select 'O',N'漚'
union all select 'P',N'曝'
union all select 'Q',N'囕'
union all select 'R',N'鶸'
union all select 'S',N'蜶'
union all select 'T',N'籜'
union all select 'W',N'鶩'
union all select 'X',N'鑂'
union all select 'Y',N'韻'
union all select 'Z',N'咗'
) T
where word>=@word collate Chinese_PRC_CS_AS_KS_WS
order by PY ASC) else @word end)
set @str=right(@str,len(@str)-1)
end
return @PY
end/***********************************************************/
调用示例
/***********************************************************/
表结构:
CREATE TABLE [dbo].[PinYing] (
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[old] [int] NULL
) ON [PRIMARY]数据:
name old
王立平 23
立立平 24
写立平 25
陈立平 26
望立平 27
汪立平 28
长立平 29
江立平 30
黄立平 31
河立平 32测试结果:
name old
王立平 23
望立平 27
汪立平 28调用调例:
select * from PinYing where dbo.FuncGetFirstPY(substring(name,1,1))='W'