if instr('黑A13345','1',2)>0表示有2个以上的'1'.
我其实还是不明白你指的是什么,举个例子说清楚点!

解决方案 »

  1.   

    不是很明确楼主的意思
    是不是“黑A12bbb”就返回0
      

  2.   

    意思就是,如果要求有4个字符位置相同且字符相同:(4为传入参数)
    例如1:
    参数传入字符串:黑A11111
    数据库中字符串:黑A12221   数据库中字符串是整个表全部比对一遍。(大概有几百万条数据)
    这样就代表有4个字符位置相同且字符相同,符合条件,程序返回1。参数传入字符串:黑A11111
    数据库中字符串:黑A22222
    这样就代表有2个字符位置相同且字符相同,就不符合条件,没有符合条件的返回0。
      

  3.   

    大概明白了楼主说的意思。就是说,现在有一个其车牌号,举个例子来说是“黑A12345”,
    然后有一个要求符合位数N,这个位数在1-7之间。
    只要数据库的对应的字段,和这个车牌号比较,相同的位数假如相同有N次,就返回1,否则就是0,是吧!看来这个是给警察做的,找到肇事车辆用的。赫赫。
      

  4.   

    我想到了一个方法,用Like来找,可能是比较适合你的。
    假如你的这个字段也只有7位的话.
    因为你才有7位,赫赫.Select Count(Field) AS CNT1 From Table1 Where Field Like '黑______%'
    Select Count(Field) AS CNT2 From Table1 Where Field Like '_A_____%'
    Select Count(Field) AS CNT3 From Table1 Where Field Like '__1____%'
    Select Count(Field) AS CNT4 From Table1 Where Field Like '___2___%'
    Select Count(Field) AS CNT5 From Table1 Where Field Like '____3__%'
    Select Count(Field) AS CNT6 From Table1 Where Field Like '_____4_%'
    Select Count(Field) AS CNT7 From Table1 Where Field Like '______5%'然后用N就可以判断了.
    N是1,只要CN1 - CN7 里面有一个>0就好了
    N是2,只要CN1 - CN7 里面有两个>0就好了
    N是3,只要CN1 - CN7 里面有三个>0就好了
    N是4,只要CN1 - CN7 里面有四个>0就好了
    N是5,只要CN1 - CN7 里面有五个>0就好了
    N是6,只要CN1 - CN7 里面有六个>0就好了
    N是6,只要CN1 - CN7 里面有七个>0就好了
      

  5.   

    不好意思,有点问题,不过,我想到了另外一个办法,正确的来说,受到位运算的提示.就是说,你可以用DecodeSelect Count(Field) From Table1
    Where
    (
    Decode(Substr(Field,1,1),'黑',1,0) + Decode(Substr(Field,2,1),'A',1,0)Decode(Substr(Field,3,1),'1',1,0) + Decode(Substr(Field,4,1),'2',1,0)
    Decode(Substr(Field,5,1),'3',1,0) + Decode(Substr(Field,6,1),'4',1,0)
    Decode(Substr(Field,7,1),'5',1,0)
    ) > N大概就是这样的形式.
      

  6.   

    写个函数CREATE OR REPLACE FUNCTION P_Name (
    i_str VARCHAR2) RETURN NUMBER IS
    TYPE ty IS TABLE OF VARCHAR2(5) INDEX BY BINARY_INTEGER;
    tab1 ty;
    tab2 ty;
    standard_str VARCHAR2(20);
    num INTEGER;
    BEGIN
    num:=0;
    standard_str:='黑A12345';       --标准字符
    FOR i IN 1..LENGTH(standard_str) LOOP
    tab1(i):=SUBSTR(standard_str, i, 1);
    END LOOP;

    FOR j IN 1..LENGTH(i_str) LOOP
    tab2(j):=SUBSTR(i_str, j, 1);
    END LOOP;

    FOR k IN 1..tab2.COUNT() LOOP
    IF tab1(k)=tab2(k) THEN
    num:=num+1;
    END IF;
    END LOOP;

    IF num>=4 THEN
    RETURN 1;
    ELSE
    RETURN 0;
    END IF;
    END;
      

  7.   

    zhang@zhang>select * from test2;COL1
    ----------
    黑A12345
    黑A12347
    黑A12377
    浙A12345
    浙A10000
    浙A10345
    浙A99999
    浙A12999
    浙B123499 rows selected.zhang@zhang>select col1, p_name(col1) from test2;COL1       P_NAME(COL1)
    ---------- ------------
    黑A12345              1
    黑A12347              1
    黑A12377              1
    浙A12345              1
    浙A10000              0
    浙A10345              1
    浙A99999              0
    浙A12999              0
    浙B12349              19 rows selected.