【问题标题】:Error in NULLIF()?NULLIF() 中的错误?
【发布时间】:2012-10-04 16:38:48
【问题描述】:

请看下面的代码

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 个项目,名字、中间名和姓氏。如果任何项目为空,那么我正在尝试用空格填充它。但是,当我运行它并将其添加到组合框中时,我可以看到它没有用空格替换空值!!!所有空值都显示为“空”。例如,

FirstName = "John", MiddleName="", LastName="Laxter"

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

“约翰·拉克斯特”

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

【问题讨论】:

    标签: java sql jdbc derby


    【解决方案1】:

    更好地使用COALESCE

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

    【讨论】:

    • @RahulTripathi 他总是很快 :)
    • 你是一个伟大的程序员!非常感谢!!
    • 请在此处stackoverflow.com/questions/12874251/… 提供相同的答案。我也设法克服了这个问题:)
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • 感谢您的回复。来自我的 +1 :)
    【解决方案3】:
    select 
        coalesce(names,' '),
        coalesce(middleName,' '),
        coalesce(lastName,' ') 
    from PhoneData 
    order by names asc
    

    nullif() does not do what you think.

    【讨论】:

    • 感谢您的回复。来自我的 +1 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2015-01-12
    相关资源
    最近更新 更多