由一个字段是java代码写入的。
字段名 openid
字段值 test1 test2 test3 test4 test5 字段值之间是用“\0”分割,用java插入的。如果我想查询openid 里有test1的记录呢???(test1的位置不一定在哪里。)

解决方案 »

  1.   

    try it .. 
    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
      

  2.   

    test1只是我取的名字。
    万一账号名字为test呢。
      

  3.   

    谁会oracle的正则表达式啊。应该最好解决问题。
      

  4.   

    因版本9i的不支持正则表达示REGEXP_INSTR写法
    语法如下:
    POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 表示字符串的开始
    '$' 表示字符串的结束
    '.' 表示任何字符
    字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
    '?' 允许一个后继字符匹配零次或一次
    '+' 允许一个后继字符匹配一次或多次
    '*' 表示零次或多次
    可以使用"{m,n}" 指定一个精确地出现范围,其意思是"出现从m 次到n 次";"{m}" 表示"正好m次";而"{m,}" 表示"至少m次"。还可以使用圆括号组合字符的集合,使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'将匹配所有由小写字母或数字组合成的字符串。
      

  5.   

    POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 表示字符串的开始
    '$' 表示字符串的结束
    '.' 表示任何字符
    字符的范围,比如说'[a-z]',表示任何ASCII 小写字母,与字符类"[[:lower:]]"" 等价
    '?' 允许一个后继字符匹配零次或一次
    '+' 允许一个后继字符匹配一次或多次
    '*' 表示零次或多次
    可以使用"{m,n}" 指定一个精确地出现范围,其意思是"出现从m 次到n 次";"{m}" 表示"正好m次";而"{m,}" 表示"至少m次"。还可以使用圆括号组合字符的集合,使用"|"(竖线)表示可替换。例如,字符串'^([a-z]+|[0-9]+)$'将匹配所有由小写字母或数字组合成的字符串。
    给你格式你自己写! 因为我正在用的是oracle 9i版本,不支持正则表达式
      

  6.   

    这个需要用正则表达式吗?
    在你需要找的字段两侧加上/0就可以了吧?
    instr(openid,chr(0)||'test'||chr(0)) > 0
      

  7.   


    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);
      

  8.   

    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)>0;
      

  9.   

    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)>0;
    四个都不对。万一这个字段是
    test1111 test2 test3 test4 test5 他也会找出来。
      

  10.   

    select * from (select id,lname,rname,(chr(0) || openid|| chr(0)) as op  from so_contact) where instr(op,chr(0)||'test'||chr(0))>0这样的话不管在第一个位置还是最后一个位置还是中间哪个位置出现都能找到了。
    这样子就ok了。感谢各位的指点。