我用数据库检索出一条数据中,包含空值和null,还有有效值,我想如何可以把空值和null值去掉,只包含有效值,select *
从所有的数据去取值的,是个动态的显示,我不知道什么时候在检索出的这条记录哪个字段有值,我测试取值的jdbcTemplate.queryForList(sql),里面的值[{F10=, F11=, F12=, F13=, F14=, F15=, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,}我只向取 F26=归入整编,希望高人指点!!!!!!

解决方案 »

  1.   

    什么数据库??
    mysql和oracle我记得是is null吧
    select * from db where data is not null and data != ""
      

  2.   

    可以用NOT NULL 去掉哦.
      

  3.   

    sql server2000 ,我检索的data是个动态的值
      

  4.   

    我也想把值取出来做判断,可是取值只能取整条记录,取不到f10,f11,;;;;;,我要把整条数据通过字符串来分割,然后在去匹配,太麻烦了,能不能一条记录,每个值都可以取道了,用jdbcTemplate事务来做,能帮忙解决吗?
      

  5.   

    你说这一串东西是你一个字段里面的值?
    那用正则匹配一下嘛
    我想想
    F[0-9]{2}[\x80-\xff]
    这个应该可以
      

  6.   

    Pattern pattern = Pattern.compile("F[0-9]{2}[\x80-\xff]");
            
            Matcher matcher = pattern.matcher(b);好像不行了,说F[0-9]{2}[\x80-\xff]非法的,我不怎末会用正则表达式,能帮我写下代码吗? 
      

  7.   


    String str = "F10=, F11=, F12=, F13=, F14=, F15=, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,";
    Pattern p = Pattern.compile("F[0-9]{2}=[\u4e00-\u9fa5]+");
    Matcher m = p.matcher(str); while(m.find()) {
    System.out.println(m.group());
    }
      

  8.   

    你太强了,非常感谢,你的程序可以了,但我的字符串还包括了[{String str}], 因为我是用jdbcTemplate.queryForList(sql,取出来的值就包含了[{ }],改改正则表达式,谢谢,谢谢,搞定一定给你满分
      

  9.   

    不好意思了,你是不是指匹配了F26=归入整编,我想做到,从这些值中取出不是null,和空的值的,因为我每次取的str值都不一样,这个F26=归入整编只是其中的一条,就是在正则表达上判断F[0-9]{2}=后面是非空或者是非null的值取出,放在group里
      

  10.   

    我给你写了一个更通用的public class StringTest { public List<String> getValidValue(String str) {
    List<String> list = new ArrayList<String>();
    if(str!=null) {
    String regEx = "F(\\d+)=[^,null]+";
    Pattern p=Pattern.compile(regEx, Pattern.MULTILINE); 
    Matcher m=p.matcher(str); 
    while(m.find()){
    list.add(m.group());
    }

    }
    return list;
    }
    public static void main(String[] args) {
    String str = "[{F10=12, F11=, F12=, F13=abc, F14=, F15=测试11, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,}";
    StringTest test = new StringTest();
    List<String> myList = test.getValidValue(str);
    for(String search : myList) {
    System.out.println(search);
    }
    }
    }输出如下:F10=12
    F13=abc
    F15=测试11
    F26=归入整编
      

  11.   

    F[0-9]{2}=[\u4e00-\u9fa5]+
    就是 [F 两位数字 = 中文1位以上]
    你想要什么??
    给个字符串例子
    给个需要的结果例子
      

  12.   

    根据你的需求再改下:package org.quubox.com;import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class StringTest { public List<String> getValidValue(String str) {
    List<String> list = new ArrayList<String>();
    if(str!=null) {
    String regEx = "F(\\d+)=[^,null]+";
    Pattern p=Pattern.compile(regEx, Pattern.MULTILINE); 
    Matcher m=p.matcher(str); 
    while(m.find()){
    list.add(m.group().replaceAll("F(\\d+)=", ""));
    }

    }
    return list;
    }
    public static void main(String[] args) {
    String str = "[{F10=12, F11=, F12=, F13=abc, F14=, F15=测试11, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,}";
    StringTest test = new StringTest();
    List<String> myList = test.getValidValue(str);
    for(String search : myList) {
    System.out.println(search);
    }
    }
    }输出:12
    abc
    测试11
    归入整编
      

  13.   

    高手啊,很感谢呢!我最后的一个字段是f43=]},也显示出来了,不过]}是我用list存放的格式
    [{F10=12, F11=, F12=, F13=abc, F14=, F15=测试11, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,F43=]},然后打印12
    abc
    测试11
    归入整编
    高手在帮我看看
      

  14.   

    [Quote=引用 14 楼 beiouwolf 的回复:]
    F[0-9]{2}=[\u4e00-\u9fa5]+
     就是 [F 两位数字 = 中文1位以上]
     你想要什么??
     给个字符串例子
     给个需要的结果例子[{F10=12, F11=, F12=, F13=abc, F14=, F15=测试11, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,F43=]}
    结果F15=测试11,F26=归入整编
      

  15.   

    指改动一句就可以了
    变成String regEx = "F(\\d+)=[^,null\\]}]+";
    OK了。
      

  16.   

    是要中英文数字? 是这个意思吧?
    String str = "F10=, F11=, F12=asdf, F13=测试测试asdf, F14=, F15=测试11, F16=, F17=null, F18=null, F19=null, F20=null, F21=null, F22=null, F23=, F24=, F25=null, F26=归入整编, F27=, F28=null, F29=, F30=null,";
    Pattern p = Pattern.compile("F[0-9]{2}=[\u4e00-\u9fa50-9a-zA-Z]+");

    Matcher m = p.matcher(str); while(m.find()) {
    String s = m.group();
    if(!Pattern.matches("^F[0-9]{2}=null$", s)) 
    System.out.println(s);
    }
      

  17.   

    select * from tablename where columname is not null and columname!=''
    这一句就可以了呀