Access数据库的中文值的提取问题?????急

lingbin 2003-09-29 11:05:47
我有一个字段,这个他段值全都是中文名字,有没有什么函数可以取得这个中文名字的首字拼音,比如我有一条记录,字段值为“刘德华”,然后我用语句:
select 函数名(Name) from DataBase where 函数名(Name) like '%LDH%'

然后就刷出“刘德华”出来,有没有这样的函数名,不用函数也行,只要能实现这样的功能就行了,谢谢了。
...全文
117 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfchhx 2003-10-21
  • 打赏
  • 举报
回复
再多建一个对照字段
lingbin 2003-10-20
  • 打赏
  • 举报
回复
楼上的大哥,非常感谢你,不过我要的是可以在SQL语句中用的,你那个可以用在SQL语句中么,比如:
Select ConvertHZToPY(name) from table

你说这样用SQL语句行不行,那当然是不行了。
huangjuliang 2003-10-16
  • 打赏
  • 举报
回复
找到一个更好的!也是在csdn里找的!
AnsiString ConvertHZToPY(char *as_HzString)
{
static int li_SecPosValue[]={1601,1637,1833,2078,2274,2302,2433,2594,2787,3106,3212,3472,3635,3722,3730,3858,4027,4086,4390,4558,4684,4925,5249};
static char* lc_FirstLetter[] = {"A", "B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","W","X","Y","Z"};
static char* ls_SecondSecTable =
"CJWGNSPGCGNE[Y[BTYYZDXYKYGT[JNNJQMBSGZSCYJSYY[PGKBZGY[YWJKGKLJYWKPJQHY[W[DZLSGMRYPYWWCCKZNKYYGTTNJJNYKKZYTCJNMCYLQLYPYQFQRPZSLWBTGKJFYXJWZLTBNCXJJJJTXDTTSQZYCDXXHGCK[PHFFSS[YBGXLPPBYLL[HLXS[ZM[JHSOJNGHDZQYKLGJHSGQZHXQGKEZZWYSCSCJXYEYXADZPMDSSMZJZQJYZC[J[WQJBYZPXGZNZCPWHKXHQKMWFBPBYDTJZZKQHY"
"LYGXFPTYJYYZPSZLFCHMQSHGMXXSXJ[[DCSBBQBEFSJYHXWGZKPYLQBGLDLCCTNMAYDDKSSNGYCSGXLYZAYBNPTSDKDYLHGYMYLCXPY[JNDQJWXQXFYYFJLEJPZRXCCQWQQSBNKYMGPLBMJRQCFLNYMYQMSQYRBCJTHZTQFRXQHXMJJCJLXQGJMSHZKBSWYEMYLTXFSYDSWLYCJQXSJNQBSCTYHBFTDCYZDJWYGHQFRXWCKQKXEBPTLPXJZSRMEBWHJLBJSLYYSMDXLCLQKXLHXJRZJMFQHXHWY"
"WSBHTRXXGLHQHFNM[YKLDYXZPYLGG[MTCFPAJJZYLJTYANJGBJPLQGDZYQYAXBKYSECJSZNSLYZHSXLZCGHPXZHZNYTDSBCJKDLZAYFMYDLEBBGQYZKXGLDNDNYSKJSHDLYXBCGHXYPKDJMMZNGMMCLGWZSZXZJFZNMLZZTHCSYDBDLLSCDDNLKJYKJSYCJLKWHQASDKNHCSGANHDAASHTCPLCPQYBSDMPJLPZJOQLCDHJJYSPRCHN[NNLHLYYQYHWZPTCZGWWMZFFJQQQQYXACLBHKDJXDGMMY"
"DJXZLLSYGXGKJRYWZWYCLZMSSJZLDBYD[FCXYHLXCHYZJQ[[QAGMNYXPFRKSSBJLYXYSYGLNSCMHZWWMNZJJLXXHCHSY[[TTXRYCYXBYHCSMXJSZNPWGPXXTAYBGAJCXLY[DCCWZOCWKCCSBNHCPDYZNFCYYTYCKXKYBSQKKYTQQXFCWCHCYKELZQBSQYJQCCLMTHSYWHMKTLKJLYCXWHEQQHTQH[PQ[QSCFYMNDMGBWHWLGSLLYSDLMLXPTHMJHWLJZYHZJXHTXJLHXRSWLWZJCBXMHZQXSDZP"
"MGFCSGLSXYMJSHXPJXWMYQKSMYPLRTHBXFTPMHYXLCHLHLZYLXGSSSSTCLSLDCLRPBHZHXYYFHB[GDMYCNQQWLQHJJ[YWJZYEJJDHPBLQXTQKWHLCHQXAGTLXLJXMSL[HTZKZJECXJCJNMFBY[SFYWYBJZGNYSDZSQYRSLJPCLPWXSDWEJBJCBCNAYTWGMPAPCLYQPCLZXSBNMSGGFNZJJBZSFZYNDXHPLQKZCZWALSBCCJX[YZGWKYPSGXFZFCDKHJGXDLQFSGDSLQWZKXTMHSBGZMJZRGLYJB"
"PMLMSXLZJQQHZYJCZYDJWBMYKLDDPMJEGXYHYLXHLQYQHKYCWCJMYYXNATJHYCCXZPCQLBZWWYTWBQCMLPMYRJCCCXFPZNZZLJPLXXYZTZLGDLDCKLYRZZGQTGJHHGJLJAXFGFJZSLCFDQZLCLGJDJCSNZLLJPJQDCCLCJXMYZFTSXGCGSBRZXJQQCTZHGYQTJQQLZXJYLYLBCYAMCSTYLPDJBYREGKLZYZHLYSZQLZNWCZCLLWJQJJJKDGJZOLBBZPPGLGHTGZXYGHZMYCNQSYCYHBHGXKAMTX"
"YXNBSKYZZGJZLQJDFCJXDYGJQJJPMGWGJJJPKQSBGBMMCJSSCLPQPDXCDYYKY[CJDDYYGYWRHJRTGZNYQLDKLJSZZGZQZJGDYKSHPZMTLCPWNJAFYZDJCNMWESCYGLBTZCGMSSLLYXQSXSBSJSBBSGGHFJLYPMZJNLYYWDQSHZXTYYWHMZYHYWDBXBTLMSYYYFSXJC[DXXLHJHF[SXZQHFZMZCZTQCXZXRTTDJHNNYZQQMNQDMMG[YDXMJGDHCDYZBFFALLZTDLTFXMXQZDNGWQDBDCZJDXBZGS"
"QQDDJCMBKZFFXMKDMDSYYSZCMLJDSYNSBRSKMKMPCKLGDBQTFZSWTFGGLYPLLJZHGJ[GYPZLTCSMCNBTJBQFKTHBYZGKPBBYMTDSSXTBNPDKLEYCJNYDDYKZDDHQHSDZSCTARLLTKZLGECLLKJLQJAQNBDKKGHPJTZQKSECSHALQFMMGJNLYJBBTMLYZXDCJPLDLPCQDHZYCBZSCZBZMSLJFLKRZJSNFRGJHXPDHYJYBZGDLQCSEZGXLBLGYXTWMABCHECMWYJYZLLJJYHLG[DJLSLYGKDZPZXJ"
"YYZLWCXSZFGWYYDLYHCLJSCMBJHBLYZLYCBLYDPDQYSXQZBYTDKYXJY[CNRJMPDJGKLCLJBCTBJDDBBLBLCZQRPPXJCJLZCSHLTOLJNMDDDLNGKAQHQHJGYKHEZNMSHRP[QQJCHGMFPRXHJGDYCHGHLYRZQLCYQJNZSQTKQJYMSZSWLCFQQQXYFGGYPTQWLMCRNFKKFSYYLQBMQAMMMYXCTPSHCPTXXZZSMPHPSHMCLMLDQFYQXSZYYDYJZZHQPDSZGLSTJBCKBXYQZJSGPSXQZQZRQTBDKYXZK"
"HHGFLBCSMDLDGDZDBLZYYCXNNCSYBZBFGLZZXSWMSCCMQNJQSBDQSJTXXMBLTXZCLZSHZCXRQJGJYLXZFJPHYMZQQYDFQJJLZZNZJCDGZYGCTXMZYSCTLKPHTXHTLBJXJLXSCDQXCBBTJFQZFSLTJBTKQBXXJJLJCHCZDBZJDCZJDCPRNPQCJPFCZLCLZXZDMXMPHJSGZGSZZQLYLWTJPFSYASMCJBTZKYCWMYTCSJJLJCQLWZMALBXYFBPNLSFHTGJWEJJXXGLLJSTGSHJQLZFKCGNNNSZFDEQ"
"FHBSAQTGYLBXMMYGSZLDYDQMJJRGBJTKGDHGKBLQKBDMBYLXWCXYTTYBKMRTJZXQJBHLMHMJJZMQASLDCYXYQDLQCAFYWYXQHZ";
AnsiString result = "";
int H,L,W;
unsigned stringlen = strlen(as_HzString);
for(int i = 0; i < stringlen; i ++ ) {
H = (unsigned char)(as_HzString[i]);
L = (unsigned char)(as_HzString[i+1]);
if(H < 0xA1 || L < 0xA1){
result += as_HzString[i];
continue;
}
else W = (H - 160) * 100 + L - 160;
if(W > 1600 && W < 5590) {
for(int j = 22; j >= 0; j --)
if(W >= li_SecPosValue[j]) {
result += lc_FirstLetter[j];
i++;
break;
}
continue;
}
else {
i++;
W = ( H - 160 - 56 )*94 + L - 161;
if(W >= 0 && W <= 3007)
result += ls_SecondSecTable[W];
else {
result += (char)H;
result += (char)L;
}
}
}
return result;
}


ConvertHZToPY("刘德华")
这样就可以得出 LDH 了!
这个不错的!

csdn里的资料真是全!
amwn 2003-10-16
  • 打赏
  • 举报
回复
学习!
huangjuliang 2003-10-16
  • 打赏
  • 举报
回复
//--------------------------------------------------------------------------
//根据汉字编码取得其拼音首字符
//有些字取不到(如"咔")

AnsiString __fastcall GetPYChar(AnsiString HZ)
{
if(HZ.Trim().IsEmpty()||HZ.Length()!=2) return ' ';

WORD n = MAKEWORD(BYTE(HZ[2]),BYTE(HZ[1]));

if ( 0xB0A1<=n && n<=0xB0C4 ) return 'A';
if ( 0XB0C5<=n && n<=0XB2C0 ) return 'B';
if ( 0xB2C1<=n && n<=0xB4ED ) return 'C';
if ( 0xB4EE<=n && n<=0xB6E9 ) return 'D';
if ( 0xB6EA<=n && n<=0xB7A1 ) return 'E';
if ( 0xB7A2<=n && n<=0xB8C0 ) return 'F';
if ( 0xB8C1<=n && n<=0xB9FD ) return 'G';
if ( 0xB9FE<=n && n<=0xBBF6 ) return 'H';
if ( 0xBBF7<=n && n<=0xBFA5 ) return 'J';
if ( 0xBFA6<=n && n<=0xC0AB ) return 'K';
if ( 0xC0AC<=n && n<=0xC2E7 ) return 'L';
if ( 0xC2E8<=n && n<=0xC4C2 ) return 'M';
if ( 0xC4C3<=n && n<=0xC5B5 ) return 'N';
if ( 0xC5B6<=n && n<=0xC5BD ) return 'O';
if ( 0xC5BE<=n && n<=0xC6D9 ) return 'P';
if ( 0xC6DA<=n && n<=0xC8BA ) return 'Q';
if ( 0xC8BB<=n && n<=0xC8F5 ) return 'R';
if ( 0xC8F6<=n && n<=0xCBF0 ) return 'S';
if ( 0xCBFA<=n && n<=0xCDD9 ) return 'T';
if ( 0xCDDA<=n && n<=0xCEF3 ) return 'W';
if ( 0xCEF4<=n && n<=0xD188 ) return 'X';
if ( 0xD1B9<=n && n<=0xD4D0 ) return 'Y';
if ( 0xD4D1<=n && n<=0xD7F9 ) return 'Z';
return ' ';
}


//--------------------------------------------------------------------------
//取得指定汉字串的拼音首字符串
//非汉字不处理
AnsiString __fastcall GetPYString(AnsiString HZString)
{
AnsiString sRet="";
AnsiString s = HZString.Trim();
if(s.IsEmpty())return sRet="";
for(int i=1;i<s.Length();i++){
if((unsigned int)s[i]>0xA0 && (unsigned int)s[i+1]>0xA0){
sRet+= (AnsiString)GetPYChar(s.SubString(i,2));
i++;
}
else sRet+= (AnsiString)s[i];
}
return sRet;
}

来自csdn

这样调用上面的函数后,就可以得到每个字的拼音首个字母,再把这个拼音联结在一起,这样就成了!
如:
刘德华

AnsiString str;
str=GetPYString("刘")+GetPYString("德")+GetPYString("华");
这样在str就是LDH了!

这样写SQK语句就没有问题了!以上代码调试通过!

"select 函数名(Name) from DataBase where 函数名(Name) like '%"+str+"%'"

这样就可以了!



huangjuliang 2003-10-16
  • 打赏
  • 举报
回复
这不行的吧!
还要用一个有拼音的汉字库,
可以在这个汉字库里把汉字的拼音取出来,
再用上面的语句就可以了!

还有一个方法,以前看到过的,好像是判断内码
在某个范围内,可以得到一个汉字的首拼音的
这样,再联结起来就可以用了!

有拼音的汉字库我有,
要的话,留下E_mail我给你发过去!



lingbin 2003-10-16
  • 打赏
  • 举报
回复
我再顶!!!!!!!
lingbin 2003-10-02
  • 打赏
  • 举报
回复
我顶!!!!!!!!!
swites 2003-09-29
  • 打赏
  • 举报
回复
可以不可以这样尝试一下:
由“刘德华”-->内码--->输入法规则--->拼音码--->LDH
annkie 2003-09-29
  • 打赏
  • 举报
回复
sql server 好像有这样的功能 access没听说过
ljianq 2003-09-29
  • 打赏
  • 举报
回复
这个函数恐怕的自定义了。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧