选择具有空值单元格的行

时间:2013-06-23 02:35:05

标签: sql-server null row

我有一张这样的表

Bookid   StuId        borrowdate    ReturnedDate
2        10           2013-05-01    2013-05-31
2        10           2013-06-01    NULL

NULL值表示不返回该书。我想选择第二行,我在sql server上试试这个

CREATE PROC validate(
    @stuid varchar(50), 
    @bookid int,
    @returndate date)
AS    
SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ReturnedDate = @returndate
    go

但结果是一个空表。任何人都可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:1)

在SQL中,你无法测试某些东西是否等于NULL - 它不是一个有效的测试。

因此,如果您想查找未归还的图书,可以尝试:

SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ReturnedDate IS NULL;

或者,如果您需要使用可能为null的参数,您可以执行以下操作:

SELECT * FROM Borrow
    WHERE StuID = @stuid
        AND BookID = @bookid
        AND ISNULL(ReturnedDate, '2008-11-11') = ISNULL (@returndate, '2008-11-11');

请注意,第一个中的IS NULL与第二个中的ISNULL(不同。

如果字段为空,则第一个IS NULL返回true。

第二个说“如果字段为空,请改用此值”。

日期是标准的SQL日期格式,这取决于选择一个没有人可以返回书籍的魔术日期(例如,在创建库之前50年)。