我想到了一个方法,用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就好了
不好意思,有点问题,不过,我想到了另外一个办法,正确的来说,受到位运算的提示.就是说,你可以用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大概就是这样的形式.
写个函数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;
是不是“黑A12bbb”就返回0
例如1:
参数传入字符串:黑A11111
数据库中字符串:黑A12221 数据库中字符串是整个表全部比对一遍。(大概有几百万条数据)
这样就代表有4个字符位置相同且字符相同,符合条件,程序返回1。参数传入字符串:黑A11111
数据库中字符串:黑A22222
这样就代表有2个字符位置相同且字符相同,就不符合条件,没有符合条件的返回0。
然后有一个要求符合位数N,这个位数在1-7之间。
只要数据库的对应的字段,和这个车牌号比较,相同的位数假如相同有N次,就返回1,否则就是0,是吧!看来这个是给警察做的,找到肇事车辆用的。赫赫。
假如你的这个字段也只有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就好了
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大概就是这样的形式.
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;
----------
黑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.