问题是这样的,中国的人姓存在复姓这样一种情况(如 诸葛,司马等)并且复姓的字数不确定(如爱新觉罗等)。现在时如何在存放名字的表中提取出姓来。
这样的表:
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个的字符与百家姓中的姓比较,但随之而来的问题就是姓“诸葛”与姓“诸”的问题。
这样的表:
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 阿单
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 左
姓氏表就是这个。
只好用这种方法来上传了。
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 行)**/
firstname
lastname
上面朋友列举的,好多是非汉族的姓氏,这样一来就没底了,世界上任何一个民族都有可能
而且还有用双姓(非复姓)的情况
first name ,second name
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 行受影响)
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 行受影响)
姓<textbox> 名<textbox> 最笨的方法,哈哈