问题是这样的,中国的人姓存在复姓这样一种情况(如 诸葛,司马等)并且复姓的字数不确定(如爱新觉罗等)。现在时如何在存放名字的表中提取出姓来。
这样的表:
if object_id('namelist') is not null
drop table namelistcreate table namelist
(fullname varchar(100)
)insert into namelist values('张飞')
insert into namelist values('关羽')
insert into namelist values('赵云')
insert into namelist values('诸葛亮')
insert into namelist values('魏延')
insert into namelist values('司马懿')
insert into namelist values('典韦')
insert into namelist values('郭嘉')
insert into namelist values('爱新觉罗努尔哈赤')
go想过一个办法就是先把中国的百家姓找全。对表namelist的字段fullname取前1个,2个,3个的字符与百家姓中的姓比较,但随之而来的问题就是姓“诸葛”与姓“诸”的问题。

解决方案 »

  1.   

    包涵百家姓的EXCEL文件上传不上去,尴尬。。
      

  2.   

    id last_name
    1 阿单 
    2 阿跌
    3 阿伏干 
    4 阿贺
    5 阿会 
    6 阿勒根
    7 阿里
    8 阿鹿桓
    9 阿仑
    10 阿罗
    11 阿热
    12 阿史德 
    13 阿史那
    14 阿思没
    15 阿勿嘀
    16 阿逸多
    17 哀
    18 哀骀
    19 蔼
    20 霭 
    21 艾 
    22 艾岁
    23 爱
    24 爱新觉罗
    25 暧 
    26 安 
    27 安迟 
    28 安都
    29 安国
    30 安金
    31 安陵
    32 安平
    33 安期
    34 安丘 
    35 安是
    36 安阳
    37 俺
    38 犴
    39 岸
    40 按
    41 昂
    42 盎
    43 敖
    44 傲
    45 奥
    46 奥敦
    47 奥鲁
    48 奥屯
    49 八
    50 仈
    51 巴
    52 巴公
    53 芭
    54 拔
    55 拔拔
    56 拔列
    57 拔列兰
    58 拔略
    59 拔也
    60 跋
    61 把
    62 把利
    63 罢
    64 罢敌
    65 霸
    66 白
    67 白狄
    68 白公
    69 白侯
    70 白鹿
    71 白鸾
    72 白马
    73 白冥
    74 白男
    75 白象
    76 白亚
    77 白杨提
    78 白乙
    79 百
    80 百里
    81 柏
    82 柏常
    83 柏高
    84 柏侯
    85 摆
    86 拜
    87 班
    88 班丘
    89 般
    90 阪
    91 阪泉
    92 阪上
    93 办
    94 半
    95 邦
    96 榜  
    97 傍  
    98 棒  
    99 包  
    100 苞  
    101 苞丘  
    102 褒  
    103 雹  
    104 宝  
    105 饱  
    106 保  
    107 堡  
    108 葆  
    109 报  
    110 抱  
    111 豹  
    112 鲍
    113 鲍丘  
    114 鲍俎  
    115 暴  
    116 卑  
    117 卑梁  
    118 卑徐  
    119 杯  
    120 悲  
    121 碑  
    122 北  
    123 北宫  
    124 北郭  
    125 北海  
    126 北旄  
    127 北门  
    128 北丘  
    129 北人  
    130 北唐  
    131 北乡  
    132 北野  
    133 北殷  
    134 贝
    135 邶  
    136 备  
    137 背  
    138 倍  
    139 倍俟  
    140 被  
    141 奔  
    142 贲  
    143 本  
    144 伻  
    145 崩  
    146 甭  
    147 泵  
    148 逼  
    149 鼻  
    150 比  
    151 比丘  
    152 比人  
    153 彼  
    154 笔  
    155 鄙  
    156 必  
    157 毕  
    158 闭  
    159 闭珊  
    160 庇  
    161 邲  
    162 苾  
    163 苾悉  
    164 敝  
    165 弼  
    166 辟  
    167 辟闾  
    168 碧  
    169 壁  
    170 璧  
    171 边  
    172 编  
    173 扁  
    174 鴘  
    175 卞
    176 弁  
    177 汴  
    178 便  
    179 变  
    180 辨  
    181 辩  
    182 彪  
    183 标  
    184 麃  
    185 表  
    186 鳖  
    187 别  
    188 邠  
    189 宾  
    190 宾牟  
    191 彬  
    192 斌  
    193 滨  
    194 滨
    195 冰  
    196 兵  
    197 丙  
    198 邴  
    199 秉  
    200 炳  
    201 禀  
    202 并  
    203 并官  
    204 拨略  
    205 波  
    206 波斯  
    207 剥  
    208 钵  
    209 伯  
    210 伯比  
    211 伯常  
    212 伯成  
    213 伯德  
    214 伯丰  
    215 伯封  
    216 伯高  
    217 伯昏  
    218 伯暋  
    219 伯夏  
    220 伯有  
    221 伯州  
    222 伯宗  
    223 孛  
    224 孛术鲁  
    225 驳马  
    226 帛  
    227 泊  
    228 勃  
    229 亳  
    230 博  
    231 僰  
    232 薄  
    233 薄姑  
    234 薄奚  
    235 薄野  
    236 卜  
    237 卜成  
    238 卜梁  
    239 卜马  
    240 补  
    241 捕  
    242 不  
    243 布  
    244 布叔满  
    245 步  
    246 步大汗  
    247 步六孤  
    248 步鹿根  
    249 步叔  
    250 步温  
    251 步扬  
    252 部  
    253 簿  
    254 蔡  
    255 曹  
    256 策  
    257 岑  
    258 查  
    259 常  
    260 厂  
    261 场  
    262 晁  
    263 巢  
    264 车  
    265 臣  
    266 陈  
    267 成  
    268 程  
    269 池  
    270 迟  
    271 崇  
    272 崇侯  
    273 仇
    274 除  
    275 储  
    276 楚  
    277 春  
    278 淳于  
    279 丛  
    280 琮  
    281 崔  
    282 戴  
    283 单于
    284 党  
    285 邓  
    286 邸  
    287 丁  
    288 东方  
    289 东郭  
    290 董  
    291 窦  
    292 杜  
    293 端木  
    294 佴
    295 樊  
    296 繁
    297 范  
    298 方  
    299 房  
    300 费  
    301 封  
    302 冯  
    303 付  
    304 傅  
    305 盖  
    306 甘  
    307 高  
    308 葛  
    309 更  
    310 耿  
    311 龚  
    312 苟  
    313 辜  
    314 顾  
    315 关  
    316 桂  
    317 郭  
    318 过  
    319 哈
    320 何  
    321 洪  
    322 侯  
    323 候  
    324 呼延  
    325 胡  
    326 花  
    327 华  
    328 桓  
    329 黄  
    330 吉  
    331 纪  
    332 江  
    333 姜  
    334 蒋  
    335 焦  
    336 解  
    337 金  
    338 靳  
    339 鞠  
    340 瞿
    341 隽  
    342 开  
    343 康  
    344 柯  
    345 孔  
    346 寇  
    347 兰  
    348 蓝  
    349 乐
    350 冷  
    351 黎  
    352 李  
    353 厉  
    354 连  
    355 梁  
    356 廖  
    357 林  
    358 刘  
    359 柳  
    360 鲁  
    361 陆  
    362 陆费  
    363 路  
    364 闾丘  
    365 吕  
    366 栾  
    367 罗  
    368 骆  
    369 麻
    370 马
    371 买
    372 麦
    373 满
    374 莽
    375 毛
    376 茅
    377 茆
    378 茂
    379 冒
    380 枚
    381 梅
    382 门
    383 蒙
    384 孟
    385 弥
    386 祢
    387 糜
    388 米
    389 芈
    390 弭
    391 秘
    392 秘  
    393 密
    394 苗
    395 乜
    396 闵
    397 敏
    398 名
    399 明
    400 缪
    401 莫
    402 墨
    403 默
    404 牟
    405 母
    406 木
    407 沐
    408 慕
    409 慕容
    410 穆
    411 那
    412 纳
    413 乃 
    414 南
    415 南宫
    416 倪
    417 年
    418 念
    419 聂 
    420 宁
    421 牛
    422 钮
    423 农
    424 侬
    425 欧
    426 欧阳  
    427 杷
    428 潘
    429 盘 
    430 泮
    431 庞
    432 逄
    433 裴
    434 彭
    435 邳
    436 皮
    437 品
    438 平
    439 蒲
    440 濮
    441 朴
    442 浦
    443 普
    444 溥
    445 瀑  
    446 柒
    447 戚
    448 漆
    449 亓
    450 祁
    451 齐
    452 岐
    453 奇
    454 祈
    455 綦
    456 蕲
    457 麒
    458 乞
    459 启
    460 杞
    461 千
    462 钱
    463 强
    464 乔
    465 桥
    466 谯
    467 且
    468 钦
    469 秦
    470 琴 
    471 勤
    472 青
    473 卿
    474 清
    475 庆
    476 丘
    477 邱
    478 秋
    479 求
    480 裘
    481 区
    482 曲
    483 诎
    484 屈
    485 渠
    486 璩
    487 蘧
    488 全
    489 权
    490 泉
    491 阙
    492 让
    493 饶  
    494 任 
    495 戎
    496 荣  
    497 阮
    498 上官
    499 佘  
    500 沈
    501 盛
    502 施
    503 石
    504 史
    505 是  
    506 舒  
    507 司
    508 司马
    509 司徒
    510 宋
    511 苏
    512 孙
    513 台  
    514 覃
    515 谭  
    516 汤  
    517 唐  
    518 陶  
    519 滕  
    520 田  
    521 佟  
    522 童  
    523 万  
    524 万俟
    525 汪  
    526 王  
    527 王子  
    528 韦  
    529 委  
    530 卫  
    531 尉迟
    532 魏  
    533 温  
    534 文  
    535 闻  
    536 翁  
    537 乌  
    538 邬  
    539 巫  
    540 吴  
    541 午  
    542 伍  
    543 武  
    544 郄
    545 夏  
    546 夏侯  
    547 向  
    548 萧  
    549 肖  
    550 谢  
    551 忻  
    552 信  
    553 幸  
    554 熊  
    555 徐  
    556 许  
    557 轩辕  
    558 宣  
    559 薛  
    560 严  
    561 言  
    562 阎  
    563 颜  
    564 晏  
    565 燕  
    566 阳  
    567 杨  
    568 杨雷  
    569 幺
    570 姚  
    571 业  
    572 叶  
    573 页  
    574 易  
    575 殷  
    576 殷  
    577 尹  
    578 印  
    579 胤  
    580 应  
    581 英  
    582 英  
    583 婴  
    584 营  
    585 嬴  
    586 郢  
    587 尤  
    588 游  
    589 于  
    590 余  
    591 鱼  
    592 俞  
    593 宇
    594 宇文  
    595 禹  
    596 庾  
    597 玉  
    598 聿  
    599 育  
    600 郁  
    601 喻  
    602 裕  
    603 豫  
    604 元  
    605 员  
    606 原  
    607 袁  
    608 岳  
    609 云  
    610 臧 
    611 曾  
    612 翟  
    613 张  
    614 章  
    615 赵  
    616 郑  
    617 支  
    618 钟  
    619 重  
    620 周  
    621 朱  
    622 诸  
    623 诸葛  
    624 庄  
    625 邹  
    626 左  
    姓氏表就是这个。
    只好用这种方法来上传了。
      

  3.   

    create table [lastname]([id] int,[last_name] varchar(20))BULK 
    INSERT lastname
    FROM 'C:\x.txt' 
    WITH ( 
          FIELDTERMINATOR = ' ', 
          ROWTERMINATOR = '\n' 
          )if object_id('namelist') is not null 
    drop table namelist 
    create table namelist 
    (fullname varchar(30) 

    insert into namelist values('张飞') 
    insert into namelist values('关羽') 
    insert into namelist values('赵云') 
    insert into namelist values('诸葛亮') 
    insert into namelist values('魏延') 
    insert into namelist values('司马懿') 
    insert into namelist values('典韦') 
    insert into namelist values('郭嘉') 
    insert into namelist values('爱新觉罗努尔哈赤') 
    go --查询
    select 
      a.fullname,
      b.last_name 
    from 
      namelist a,
      lastname b 
    where 
      a.fullname like ltrim(rtrim(b.last_name))+'%'/**
    fullname                       last_name            
    ------------------------------ -------------------- 
    张飞                             张  
    关羽                             关  
    赵云                             赵  
    诸葛亮                            诸  
    诸葛亮                            诸葛  
    魏延                             魏  
    司马懿                            司 
    司马懿                            司马 
    郭嘉                             郭  
    爱新觉罗努尔哈赤                       爱 
    爱新觉罗努尔哈赤                       爱新觉罗 (所影响的行数为 11 行)**/
      

  4.   

    只有用分开储存的方法
    firstname
    lastname
    上面朋友列举的,好多是非汉族的姓氏,这样一来就没底了,世界上任何一个民族都有可能
    而且还有用双姓(非复姓)的情况
      

  5.   

    国外的站点都是分开存储的
    first name ,second name
      

  6.   

    最大匹配create table [lastname]([id] int,[last_name] varchar(20))BULK 
    INSERT lastname
    FROM 'C:\x.txt' 
    WITH ( 
          FIELDTERMINATOR = ' ', 
          ROWTERMINATOR = '\n' 
          )update lastname set
      [last_name] = rtrim(LTRIM([last_name]))if object_id('namelist') is not null 
    drop table namelist 
    create table namelist 
    (fullname varchar(30) 

    insert into namelist values('张飞') 
    insert into namelist values('关羽') 
    insert into namelist values('赵云') 
    insert into namelist values('诸葛亮') 
    insert into namelist values('魏延') 
    insert into namelist values('司马懿') 
    insert into namelist values('典韦') 
    insert into namelist values('郭嘉') 
    insert into namelist values('爱新觉罗努尔哈赤') 
    go --查询
    select 
      a.fullname,
      b.last_name 
    from 
      namelist a left join 
      lastname b 
    on
      a.fullname like b.last_name+'%' and not exists (
       select 1 from lastname where LEN(last_name)>LEN(b.last_name)
       and a.fullname like last_name+'%'
       )
       
    --结果
    fullname                       last_name
    ------------------------------ --------------------
    张飞                             张
    关羽                             关
    赵云                             赵
    诸葛亮                            诸葛
    魏延                             魏
    司马懿                            司马
    典韦                             NULL
    郭嘉                             郭
    爱新觉罗努尔哈赤                       爱新觉罗(9 行受影响)
      

  7.   

    最小匹配--查询
    select 
      a.fullname,
      b.last_name 
    from 
      namelist a left join 
      lastname b 
    on
      a.fullname like b.last_name+'%' and not exists (
       select 1 from lastname where LEN(last_name)<LEN(b.last_name)
       and a.fullname like last_name+'%'
       )
       
    --结果
    fullname                       last_name
    ------------------------------ --------------------
    张飞                             张
    关羽                             关
    赵云                             赵
    诸葛亮                            诸
    魏延                             魏
    司马懿                            司
    典韦                             NULL
    郭嘉                             郭
    爱新觉罗努尔哈赤                       爱(9 行受影响)
      

  8.   

    本帖最后由 cxmcxm 于 2009-05-29 11:20:59 编辑
      

  9.   

    我能想到的就是分开存,就像国外的名字一样,分成First Name和Last Name.我觉得最好的方法你去问问看有没有谁做过户籍管理系统的,他们肯定碰到过这些问题。据说现在公安局正为中国这样千奇百怪的姓(有很多是父母造的)而头疼呢。
      

  10.   

        录入的时候
        姓<textbox>  名<textbox>   最笨的方法,哈哈