有2个表t1,t2
t1字段:邮编 , 地址
t2字段:城市 , 邮编
现在的问题是t1里面的邮编字段都是null需要根据地址里面包含的城市和t2匹配取出相应的邮编更新到t1表里面
我想这样实现的
注:地址格式是固定的比如说:江苏省南京市鼓楼区(**省**市)
update t1 set 邮编= t2.邮编
from t2
where substring(地址 , charindex(‘省’ , t1.地址)+1 , charindex('市' , t1.地址)-charindex(‘省’ , t1.地址)) = t2.城市
=====================================================
不知道有没其他好的方法
t1字段:邮编 , 地址
t2字段:城市 , 邮编
现在的问题是t1里面的邮编字段都是null需要根据地址里面包含的城市和t2匹配取出相应的邮编更新到t1表里面
我想这样实现的
注:地址格式是固定的比如说:江苏省南京市鼓楼区(**省**市)
update t1 set 邮编= t2.邮编
from t2
where substring(地址 , charindex(‘省’ , t1.地址)+1 , charindex('市' , t1.地址)-charindex(‘省’ , t1.地址)) = t2.城市
=====================================================
不知道有没其他好的方法
(
@source varchar(5000),
@regexp varchar(1000),
@ignorecase bit = 0
)
RETURNS bit
AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
DECLARE @objMatches integer
DECLARE @objMatch integer
DECLARE @count integer
DECLARE @results bit
EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END
/*
--调用
select dbo.find_regular_使用方法: 参数1:源字符串
参数2:正则表达试
结果0: 表示匹配到非法字符!
1: 表示没有匹配到非法字符!
说明:
对正则表达试熟悉的朋友可以扩充很多功能!
效率没有测试!有兴趣的朋友可以测试一下!
*/
如果t1表里面的地址有重复的话,先group by 地址。
更新完以后,再更新地址相同的邮编。