如何实现按拼音首字查询数据库?
比如:sql server2000下有张工资表,内有姓名、工资等字段如何做到,输入“张三”的首字拼音的“zs”即可找到所有拼音为“zs”开头的?如何做?我知道要建个拼音的字段,可是怎么建??不要告诉我要一条一条自己写。我有1500条记录,已经现成在那里了,
比如:sql server2000下有张工资表,内有姓名、工资等字段如何做到,输入“张三”的首字拼音的“zs”即可找到所有拼音为“zs”开头的?如何做?我知道要建个拼音的字段,可是怎么建??不要告诉我要一条一条自己写。我有1500条记录,已经现成在那里了,
解决方案 »
- OBControl v1.1控件包
- sql语句 帮我翻译道delphi里
- iris v4.07网络监听器 对于EDGE无线上网来说 是不是无法监听?
- 连接数据源的数据集出问题!
- delphi与西门子的plc(s7-300)通讯
- 小弟要开发一个工作流,需要html表单的可视化定制,并进行数据库绑定。谁有delphi6下的html可视化定制控件或源代码提供,小弟不胜感激。
- 如何得到ini文件中'小节名'含有多少个 '关键字' 呢?并且我不知道它的'关键字'的名称.如何才出正确读出来呢?
- 我想开发单机版的VOD系统,请大家关注
- 关于屏保程序的讨论
- 200分征求InMemory技术,“走过路过不忘UP”,UP有分!<千山求教>
- 如何设置richedit的滚动条位置并让它滚动到指定位置
- 我用Delphi开发的小游戏
使用这个组件,使用前你还是得写一些代码将以前的姓名转成拼音简写,要加字段啊。然后再通过SQL查询,不难吧。
function GetEnChar(cnchar: string): char;
begin
case Word(cnchar[1]) shl 8 + Word(cnchar[2]) of
$B0A1..$B0C4: result := 'a';
$B0C5..$B2C0: result := 'b';
$B2C1..$B4ED: result := 'c';
$B4EE..$B6E9: result := 'd';
$B6EA..$B7A1: result := 'e';
$B7A2..$B8C0: result := 'f';
$B8C1..$B9FD: result := 'g';
$B9FE..$BBF6: result := 'h';
$BBF7..$BFA5: result := 'j';
$BFA6..$C0AB: result := 'k';
$C0AC..$C2E7: result := 'l';
$C2E8..$C4C2: result := 'm';
$C4C3..$C5B5: result := 'n';
$C5B6..$C5BD: result := 'o';
$C5BE..$C6D9: result := 'p';
$C6DA..$C8BA: result := 'q';
$C8BB..$C8F5: result := 'r';
$C8F6..$CBF9: result := 's';
$CBFA..$CDD9: result := 't';
$CDDA..$CEF3: result := 'w';
$CEF4..$D1B8: result := 'x';
$D1B9..$D4D0: result := 'y';
$D4D1..$D7F9: result := 'z';
else
result := char(0);
end;
end;
var
i, len: integer;
begin
CnString := StringReplace(CnString, ' ', '', [rfReplaceAll]); //删除空格
len := Length(CnString) - Length(WideString(CnString)); //汉字个数
for i := 1 to len do
result := result + GetEnChar(copy(CnString, 2*i-1, 2));
end;
查询时使用Like语句
function GetEnChar(cnchar: string): char;
begin
case Word(cnchar[1]) shl 8 + Word(cnchar[2]) of
$B0A1..$B0C4: result := 'a';
$B0C5..$B2C0: result := 'b';
$B2C1..$B4ED: result := 'c';
$B4EE..$B6E9: result := 'd';
$B6EA..$B7A1: result := 'e';
$B7A2..$B8C0: result := 'f';
$B8C1..$B9FD: result := 'g';
$B9FE..$BBF6: result := 'h';
$BBF7..$BFA5: result := 'j';
$BFA6..$C0AB: result := 'k';
$C0AC..$C2E7: result := 'l';
$C2E8..$C4C2: result := 'm';
$C4C3..$C5B5: result := 'n';
$C5B6..$C5BD: result := 'o';
$C5BE..$C6D9: result := 'p';
$C6DA..$C8BA: result := 'q';
$C8BB..$C8F5: result := 'r';
$C8F6..$CBF9: result := 's';
$CBFA..$CDD9: result := 't';
$CDDA..$CEF3: result := 'w';
$CEF4..$D1B8: result := 'x';
$D1B9..$D4D0: result := 'y';
$D4D1..$D7F9: result := 'z';
else
result := char(0);
end;
end;
proedure Editchange(sender:Tobject);
var
i:integer;
hz:string;
begin
Edit2.tex :='';
for i:= i to length(edit1.text)div 2 do
begin
hz:=copy(edit1.text,I*2 -1 ,2);
edit2.text := edit2.txt + getpy(hy);end;
end;对于查询,做个模糊查询就可以了