我有一张这样的表
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
但结果是一个空表。任何人都可以帮助我,谢谢!
答案 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年)。