select 邮编 from 表名 where 街道=substring('十里店14号',1,len(街道))

解决方案 »

  1.   

    计算机不会懂人类语言, 你先把原有地址分为几个细字段,
    1). 门牌;
    2). 楼数;
    3). 大楼名称
    4). 区分
    .... 等等
    然後逐个字段输入资料. 再用'区分'来查相对的'邮编'
    Delphi的 LookupCombo 就是专做那样的工作的. 
      

  2.   

    SQLSever语法where charindex(street,'十里店14号')>0
      

  3.   

    like是做不到的,你可以试试keyz(keyz) 的方法。提小小建议:你的数据库结构设计不合理
      

  4.   

    select 邮编 from 表名 where 街道 like '%'+输入值+'%'
      

  5.   

    楼上的,用like应该反过来吧select 邮编 from 表名 where 输入值 like 街道+'%'
      

  6.   

    qybao(阿宝) 的方法是正确的。
      

  7.   

    資料表結構設計不合理
    若有在此基礎上想實現此功能,用一個sql語句,好像難以實現
    給點思路給你:
    不知你資料表中 "街道"的欄位是多長,有幾種可能
    610051 十里店
    610066 十七街
    610021 石佛寺街
    610031 石灰街
    "街道"的欄位有8,6 byte;所以說有多少種可能的長度你就需要寫多少語句來判斷
    以你給的數據為例:1) select 邮编 from 表名 where 街道=substring(sInStr,1,8) //sInStr是你輸入的----十里店14号;
    2) select 邮编 from 表名 where 街道=substring(sInStr,1,6) //sInStr是你輸入的----十里店14号;請注意sql語句的執行順序是1->2;
    也就是說先執行語句1,若找到則返回(2就不用執行);
    若沒有找到則執行2,若找到則返回;若沒有找到,則表示沒有相應的區號我這里只是以你的例子來說明;可能實際情況不僅僅是8,6 Byte;所以你要做相應的修改暫時還沒有想到好方法,共同學習
      

  8.   

    你的数据结构最好再重新设计一边。或用like进行模糊查询
      

  9.   

    我的SQL语句既满足查询条件数据比数据库中相应字段小的,也适应比数据库中相应字段大的。
        select 邮编 from 表名  where (length('输入值')> length(街道)  and xqbh=substr('输入值',1,length(街道)))
         or (length('输入值') < length(街道) and xqbh like '%输入值%')
      

  10.   

    我不知道你是否用的是delphi语言,如果是的话可以这样:在事件中加入一下代码:
    var:
    ls_streetaddress:string;
    zip_code:string;
    begin
    with query do
    begin
    close;
    sql.clear;
    sql.add('select * from 表名');
    open;
    first;
    end;
    while not query.eof do 
    begin
    if pos(query.fields[1].asstring,ls_streetAddress)>0 then
    zip_code:=query.fields[0].asstring;
    query.next;
    end;
    end;
      

  11.   

    阿宝的方法还是不行啊,用跟踪看到邮编没有赋值,但不报错。
    数据库该如何改,街道名只能这样了,客户给的数据也是这样。数据库中街道名的长度也不定,问题还没搞定。
    现在正在试用substr!
    谢谢大家关心。
      

  12.   

    用ztm0223(小狗)的方法可以解决,非常感谢!
    给分给分,谢谢大家的关心帮助。
      

  13.   

    如果只用一条sql语句就能够解决,该如何做?