| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:请教一个问题:如何从一个列中提取相关的关键字,将它更新到另一列上
只看楼主 加入收藏
羊小一
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-7-24
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:6 
请教一个问题:如何从一个列中提取相关的关键字,将它更新到另一列上
有两个表:表1(客户姓名,客户地址),表2(编号,城市)
我想在表1再添加一列(城市),把客户地址中的城市名字提取出来更新到另一列,但是客户地址没有规律,比如,有的是吉林省长春市**,有的是北京海淀区,我只要长春、北京就可以,把它们更新到同一条记录的另一列,因为没有规律,所以我自己做了一个表2,把城市名字先列出来,想用like来写,但是怎么写都不行,请问各位大大,能不能帮个忙啊?
搜索更多相关主题的帖子: 长春市 海淀区 吉林省 关键字 北京 
2013-07-24 22:07
羊小一
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-7-24
收藏
得分:0 
各位大侠,帮帮忙啊~~~
2013-07-24 22:30
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:20 
这个问题可以这样来做:先添加一个提取城市的函数名字为fun_setCity,然后添加一个列名为【城市】,最后利用update操作进行更新。
具体代码如下:
程序代码:
----------Function Name: fun_setCity----------
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fun_setCity]') AND type in (N'TF','FN'))
DROP FUNCTION [dbo].[fun_setCity]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create function [dbo].[fun_setCity] (@address varchar(50))
Returns varchar(50)
AS
begin
declare @city varchar(50)
declare @provinceLength int
set @provinceLength=0
declare @localLength int
set @localLength=0
set @localLength=charindex('',@address)
if @localLength>0
begin
  set @provinceLength=charindex('',@address)
  if @provinceLength<=0
  begin
    set @provinceLength=charindex('自治区',@address)
    if @provinceLength>0
    set @provinceLength=@provinceLength+2
    else
    set @provinceLength=0
  end
  if @provinceLength>0
  set @city=substring(@address,@provinceLength+1,@localLength-@provinceLength-1)
  else
  begin
    if charindex('北京',@address)>0
     set @city='北京'
    if charindex('上海',@address)>0
     set @city='上海'
    if charindex('天津',@address)>0
     set @city='天津'
    if charindex('重庆',@address)>0
     set @city='重庆'
  end
end
else
  begin
    if charindex('北京',@address)>0
     set @city='北京'
    if charindex('上海',@address)>0
     set @city='上海'
    if charindex('天津',@address)>0
     set @city='天津'
    if charindex('重庆',@address)>0
     set @city='重庆'
  end
return @city
end
Go
--------创建表 Table Name: 表1----------
IF EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[dbo].[表1]') AND type in (N'U'))
DROP TABLE [dbo].[表1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[表1](
    [客户姓名] [varchar](50) COLLATE Chinese_PRC_CI_AS not NULL,
    [客户地址] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
) ON [PRIMARY]
GO
----------添加数据 Table Name: 表1----------
delete from [表1]
GO
insert into [表1]([客户姓名],[客户地址]) values('','吉林省长春市**')
GO
insert into [表1]([客户姓名],[客户地址]) values('','河南省郑州市**')
GO
insert into [表1]([客户姓名],[客户地址]) values('','陕西省西安市**')
GO
insert into [表1]([客户姓名],[客户地址]) values('','宁夏回族自治区银川市**')
GO
insert into [表1]([客户姓名],[客户地址]) values('','新疆维吾尔自治区克拉玛依市**')
GO
insert into [表1]([客户姓名],[客户地址]) values('己1','北京市海淀区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('己2','北京海淀区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('庚1','上海市浦东新区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('庚2','上海浦东新区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('辛1','重庆市沙坪坝区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('辛2','重庆沙坪坝区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('申1','天津市南开区**')
GO
insert into [表1]([客户姓名],[客户地址]) values('申2','天津南开区**')
GO
-----------------添加字段-----------------------
IF EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[dbo].[表1]') AND type in (N'U'))
begin
    IF not EXISTS (SELECT * FROM syscolumns WHERE name = N'城市')
    begin
    alter table[表1] add [城市] varchar(50)
    end
end
GO
-----------------显示原始表-----------------------
select * from [dbo].[表1]
-----------------------------------
update [dbo].[表1]
set [城市]=[dbo].fun_setCity([客户地址])
----------------更新之后的表------------------
select * from [dbo].[表1]
------------------结束------------------

注意点:数据格式必须是 【**省**市】 或者【**自治区**市】 或者【**市】

结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 303770957 于 2013-7-25 11:48 编辑 ]

♂ 死后定当长眠,生前何须久睡。♀
2013-07-25 11:44
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
觉得不错的话,请将你的悬赏留下。谢谢!

♂ 死后定当长眠,生前何须久睡。♀
2013-07-25 11:51
羊小一
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-7-24
收藏
得分:0 
回复 4楼 303770957
多谢大侠了,请问要怎么把悬赏给你啊,我是新人,不知道怎么操作~~~

顺便问一下,如果原始的数据格式和你说的不一样,是否无法完成?因为那个字段都是在输入数据时随便输入的,有的还有“客户名字 电话号码 地址”类似这样的五花八门的
2013-07-25 15:26
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 
没规矩不成方圆,随便输入的数据怎么能提取城市信息呀?格式必须要有一定的要求,要不然你的数据就要进行重新整理才行。保证输入到数据库的数据有一定要求你的这个问题才有可能得到解决,规定大于一切。

♂ 死后定当长眠,生前何须久睡。♀
2013-07-25 16:09
羊小一
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-7-24
收藏
得分:0 
多谢指教啊~~
2013-07-26 15:26
快速回复:请教一个问题:如何从一个列中提取相关的关键字,将它更新到另一列上
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024846 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved