NULLIF()出错?

时间:2012-10-14 14:33:55

标签: java sql jdbc derby

请查看以下代码

public List<String> getNames()
{
List<String> names = new ArrayList();


try
{
    createConnection();

    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery("select NULLIF(names,' '),NULLIF(middleName,' '),NULLIF(lastName,' ') from PhoneData order by names asc");

    while(rs.next())
    {
        String fullName = rs.getString(1)+" "+rs.getString(2)+" "+rs.getString(3);
        names.add(fullName);
    }

    return names;

}
catch(Exception e)
{
    e.printStackTrace();
    return null;
}
finally
{
    closeConnection();
}

}

我正在使用Apache Derby,嵌入式版本。

我在这里检索3个项目,名字,中间名和姓氏。如果任何项为null,那么我试图用空格填充它。但是,当我运行它并将其添加到组合框中时,我可以看到它没有用空格替换空值!所有空值都显示为“null”。例如,

FirstName =“John”,MiddleName =“”,LastName =“Laxter”

如您所见,MiddleName为null。我期待的是

“John Laxter”

我得到的是“John null Laxter”!!!为什么是这样?请帮忙!当我使用MS SQLServer时,我没有遇到过这个问题(然后NULLIF是isNull())。这有什么不对?请帮忙!!

3 个答案:

答案 0 :(得分:3)

更好地使用COALESCE

SELECT COALESCE(names,' '),...

答案 1 :(得分:2)

试试这个:

select 
coalesce(names,' '),
coalesce(middleName,' '),
coalesce(lastName,' ') 
from PhoneData
order by names asc

答案 2 :(得分:1)

select 
    coalesce(names,' '),
    coalesce(middleName,' '),
    coalesce(lastName,' ') 
from PhoneData 
order by names asc

nullif() does not do what you think.