select * from tablename where fieldname like '12__5%'配符 描述 示例 
% 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 
_(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。 
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。 

解决方案 »

  1.   

    select * from tablename where fieldname like '12__5'
    select * from tablename where fieldname like '1_3_5'
    ...把你的?换成下划线_
      

  2.   

    实际上求的是一个“组合”问题的一条sql语句,如
    我得到了 12345 这个数据,我是不是这样
    select * from tablename where fieldname like '12???','123??','1234?'
    '12345','?23??','?234?','?2345','??34' ..................
    太烦了!  另外,像这样的SQL语句,执行效率怎样? 本系统要求实时性很高!
      

  3.   

    to yang,作者好像不是要输出原始数据,而是匹配模式。
      

  4.   

    where patindex('%12345%',fieldname)>0 ---  ksjkdj12345kjkj
    where patindex('%12345',fieldname)>0 ---  ksjkdj12345
    where patindex('12345%',fieldname)>0 ---  12345kjkj
      

  5.   

    什么意思,看不懂,赫赫是不是这个意思
    where fieldname = @value
    @value中任何一位都可以位?号,当然至少保留一位
      

  6.   

    什么意思,看不懂,赫赫是不是这个意思
    where fieldname like @value
    @value中任何一位都可以位?号,当然至少保留一位如果是,则很简单。因为这样组合的结果可以简化为?????,只要长度相同就是。
      

  7.   

    记录中的数据长度是相同的,都是5位。如 newly_ignorant(不学无术) 所 
    说,“ 任何一位都可能为 ?号,当然至少保留一位 ”
    本算法用于车牌的模糊查找,要求实时性高!
      

  8.   

    SELECT fieldname
    FROM tablename
    where fieldname like 1____
       or fieldname like _2___
       or fieldname like __3__
       or fieldname like ___4_
       or fieldname like ____5
      

  9.   

    我觉得你提的问题从文字上看不是车牌查找如果是车牌查找,比如是查第2位为7第5位为4的
    那直接写成
    fieldname like '_7__5' 
    不就可以么?
      

  10.   

    嗯,我想得还是有问题,合起来并不是?????
    不知道这样效率如何select * from tablename 
    where substring(fieldname,1,1) = substring(@value,1,1) or
    substring(fieldname,2,1) = substring(@value,2,1) or ...不过注意数据类型转换
      

  11.   

    写了半天,一发就不见了:
    一个简单的想法:select fieldname
    ,count(*) as num       ------这一行根据需要,可以不要
    from 
    (
    SELECT fieldname
    FROM tablename
    where fieldname like '1____'
    union all
    SELECT fieldname
    FROM tablename
    where fieldname like '_2___'
    union all
    SELECT fieldname
    FROM tablename
    where fieldname like '__3__'
    union all
    SELECT fieldname
    FROM tablename
    where fieldname like '___4_'
    union all
    SELECT fieldname
    FROM tablename
    where fieldname like '____5'
    ) as a
    group by fieldname
    order by count(*) desc,fieldname asc
      

  12.   

    搞来搞去不如来个过程,@value=查询表达式,如'____5','_3__8'CREATE PROCEDURE [S] 
    /*登记信息*/
    (
    @value [nvarchar](5)
    )
    AS 
    SELECT fieldname FROM tablename where fieldname like @valueGO
      

  13.   

    建一个函数:
    create function fitcount(@str1 varchar(10),@str2 varchar(10))
    returns int
    begin
    declare @ret int
    select @ret=0
    declare @i int 
    select @i=1
    while @i<=len(@str1)
    begin
      if substring(@str2,@i,1)=substring(@str1,@i,1) 
    select @ret=@ret+1
    select @i=@i+1
    end
    return @ret
    end
    然后就可以用:select *,dbo.fitcount('12010',name) from emp where dbo.fitcount('12010',name)>=1得到你想要的结果了。
      

  14.   

    我的需求:
       根据目击者提供的车牌号码,可能为 '苏A 12345',也可能为
     '苏A 12?45' ,'苏A 12??5' , '???45' , '??3??'  ......,
     因为他们提供的车牌号不全,所以其他位上补上?号,表示该位的存在。
     然后再根据经过的车辆牌号跟数据库比较, 即 : 按位比较,除去某条记录中的 所有 “?”后,其他位上全部对应相同!
      如库中有记录  '苏A 1??45','苏A ??945'时 ,则 来数据 '浙A 19945' 时,要将  '苏A 1??45','苏A ??945'两条记录都检索出来!                              谢谢各位!
      

  15.   

    都被你说糊涂了,到底是什么数据存在表里?用来查询的字符串是什么?
    要是没理解错,数据库里存的是'苏A 12?45' ,'苏A 12??5' , '???45' , '??3??'  这样的。
    然后根据输入的参数'浙A 19945' 来找出数据库里与这个匹配的记录,是吗?第一个字不同也是匹配啊?
    是不是不管第一个字?用的上面的函数是可以的,比如:
    select name, dbo.fitcount('A 19945',name) from emp
      

  16.   

    写错了:
    用我上面写的函数是可以的,比如:
    select name, dbo.fitcount('A 19945',name) from emp
      

  17.   

    数据库里存的是'苏A 12?45' ,'苏A 12??5' , '???45' , '??3??'  
    然后根据输入的参数'浙A 19945' 来找出数据库里与这个匹配的记录!
    不管第一个字!!!
    多谢 icevi(按钮工厂) ! 结贴后令外送你100分,请多关注!
      

  18.   

    不知道怎么说好,提供的好多方法都是能解决你的问题的,不管你放表里的是哪个数据,查询条件是哪一个数据,反正有一个不会出现‘?’。我最看好按钮的UDF的方法,查询最好是:
    select *,dbo.fitcount('12010',name) from emp where dbo.fitcount('12010',name)>=1
    order by dbo.fitcount('12010',name) desc
    这样匹配度最高的放在最前面,容易定位。
      

  19.   

    谢谢各位! 我已经解决了!解决方法SELECT * FROM TEST_LIKE where '苏A 19945 '  LIKE REPLACE(ID,'?','_') icevi(按钮工厂) 注意收分!