0

我有一张这样的桌子

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

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

4

1 回答 1

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 年)。

于 2013-06-23T03:18:08.623 回答