LastAccessed=(select max(modifydate) from scormtrackings WHERE
bundleid=@bundleid and userid=u.userid),
CompletedLessons=(select Value from scormtrackings WHERE
bundleid=@bundleid and userid=u.userid AND param='vegas2.progress'),
TotalLessons=100,
TotalNumAvail=100,
TotalNumCorrect=(SELECT Value FROM scormtrackings WHERE
bundleid=@bundleid AND userid=u.userid AND param='cmi.score.raw')
这只是我的ASP.NET Repeater
使用的大型select语句的一部分,当值为NULL
时,它会一直崩溃,我尝试了ISNULL()
但是它没有工作,或者我做错了。
ISNULL((SELECT max(modifydate) FROM scormtrackings WHERE
bundleid=@bundleid AND userid=u.userid),'') AS LastAccessed,
(...)
???
更新:我已经尝试了所有这些东西,返回'',0,1,而不是值为null,但它仍然不起作用,我想知道问题是否与Repeater
有关?
答案 0 :(得分:10)
您可以使用COALESCE函数来避免获取空值。基本上它从列表中返回第一个非空值。
SELECT COALESCE(dateField, '') FROM Some_Table
这是ANSI标准,但我注意到它在Access SQL中不可用。
答案 1 :(得分:3)
您可以使用CASE:
CASE WHEN MyField IS Null THEN ''
ELSE MyField
End As MyField
答案 2 :(得分:2)
select max(isnull(modifydate, "default date") from scormtrackings where...
只要至少有一行满足where子句,就会工作,否则你仍然会得到NULL
select IsNull( max(modifydate), "default_date") from scormtrackings where ...
应该适用于所有情况
答案 3 :(得分:0)
select max(isnull(Date,"default date")) .....
答案 4 :(得分:0)
这也有效......讨厌承认我经常使用它!!
声明@LastAccessed varchar(30)
从scormtrackings
中选择@LastAccessed = max(modifydate)设置@LastAccessed = isnull(@LastAccessed,'')
选择@LastAccessed作为LastAccessed
答案 5 :(得分:0)
您可以使用NVL
。
NVL(<possible null value>,<value to return when arg1 is null>)