由一个字段是java代码写入的。
字段名 openid
字段值 test1 test2 test3 test4 test5 字段值之间是用“\0”分割,用java插入的。如果我想查询openid 里有test1的记录呢???(test1的位置不一定在哪里。)
字段名 openid
字段值 test1 test2 test3 test4 test5 字段值之间是用“\0”分割,用java插入的。如果我想查询openid 里有test1的记录呢???(test1的位置不一定在哪里。)
SQL> select * from test_table;OPENID
---------------------------------
test1\0test2\0test3\0test4\0test5
test2\0test3\0test5SQL>
SQL> select *
2 from test_table tt
3 where instr(openid, 'test1') > 0;OPENID
---------------------------------
test1\0test2\0test3\0test4\0test5
万一账号名字为test呢。
语法如下:
POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 表示字符串的开始
'$' 表示字符串的结束
'.' 表示任何字符
字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
'?' 允许一个后继字符匹配零次或一次
'+' 允许一个后继字符匹配一次或多次
'*' 表示零次或多次
可以使用"{m,n}" 指定一个精确地出现范围,其意思是"出现从m 次到n 次";"{m}" 表示"正好m次";而"{m,}" 表示"至少m次"。还可以使用圆括号组合字符的集合,使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'将匹配所有由小写字母或数字组合成的字符串。
'$' 表示字符串的结束
'.' 表示任何字符
字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
'?' 允许一个后继字符匹配零次或一次
'+' 允许一个后继字符匹配一次或多次
'*' 表示零次或多次
可以使用"{m,n}" 指定一个精确地出现范围,其意思是"出现从m 次到n 次";"{m}" 表示"正好m次";而"{m,}" 表示"至少m次"。还可以使用圆括号组合字符的集合,使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'将匹配所有由小写字母或数字组合成的字符串。
给你格式你自己写! 因为我正在用的是oracle 9i版本,不支持正则表达式
在你需要找的字段两侧加上/0就可以了吧?
instr(openid,chr(0)||'test'||chr(0)) > 0
select * from tableNmae where openid like '%test1%';
select * from tableNmae where instr(openid, 'test1') > 0;
select * from tableNmae where REGEXP_LIKE(openid, 'test1');
select * from tableNmae where REGEXP_INSTR(openid, 'test1',1,1);
select * from tableNmae where instr(openid, 'test1') > 0;
select * from tableNmae where REGEXP_LIKE(openid, 'test1');
select * from tableNmae where REGEXP_INSTR(openid, 'test1',1,1)>0;
select * from tableNmae where instr(openid, 'test1') > 0;
select * from tableNmae where REGEXP_LIKE(openid, 'test1');
select * from tableNmae where REGEXP_INSTR(openid, 'test1',1,1)>0;
四个都不对。万一这个字段是
test1111 test2 test3 test4 test5 他也会找出来。
这样子就ok了。感谢各位的指点。