有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.城市
=====================================================
不知道有没其他好的方法

解决方案 »

  1.   

    正则也可以。顺便发个很早之前就存在的MSSQL正则函数CREATE FUNCTION dbo.find_regular_expression
     (
      @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: 表示没有匹配到非法字符!
    说明:
    对正则表达试熟悉的朋友可以扩充很多功能!
    效率没有测试!有兴趣的朋友可以测试一下!
    */
      

  2.   

    或者把城市部分补齐,然后判断charindex(城市,地址)>0
      

  3.   

    这个毕竟是每行的记录都不一样啊。先试试看吧。
    如果t1表里面的地址有重复的话,先group by 地址。
    更新完以后,再更新地址相同的邮编。