Friday, April 8, 2011

How do I make this SQL statement return empty strings instead of NULLS?

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')

This is only part of a large select statement used by my ASP.NET Repeater that keeps crashing when the values are NULL, I have tried ISNULL() but either it didn't work, or I did it wrong.

ISNULL((SELECT max(modifydate) FROM scormtrackings WHERE 
bundleid=@bundleid AND userid=u.userid),'') AS LastAccessed,

(...)

???

UPDATE: I've tried all these things with returning '', 0, 1, instead of the value that would be null and it still doesn't work, I wonder if the problem is with the Repeater?

Related Question:

http://stackoverflow.com/questions/584570/why-does-my-repeater-keep-crashing-on-evalnull-values

From stackoverflow
  • select max(isnull(Date,"default date")) .....
    
  • You can use CASE:

    CASE WHEN MyField IS Null THEN ''
    ELSE MyField
    End As MyField
    
  • You can use the COALESCE function to avoid getting nulls. Basically it returns the first non-null value from the list.

    SELECT COALESCE(dateField, '') FROM Some_Table
    

    This is an ANSI standard, though I have noticed that it isn't available in Access SQL.

    Chris Ballance : coalesce is a great sql trick to have in your bag.
    derobert : COALESCE is actually ANSI SQL. It's not a vendor extension.
    jrcs3 : @derobert Thanks, I updated the answer to reflect your comment.
  • select max(isnull(modifydate, "default date") from scormtrackings where...

    will work as long as there is at least one row that satisfies the where clause, otherwise you will still get NULL

    select IsNull( max(modifydate), "default_date") from scormtrackings where ...
    

    should work in all cases

  • This works too... hate to admit how often I use it!!

    Declare @LastAccessed varchar(30)

    Select @LastAccessed = max(modifydate) from scormtrackings

    Set @LastAccessed = isnull(@LastAccessed,'')

    Select @LastAccessed as LastAccessed

    Max Gontar : You can do it in single select as well: Select @LastAccessed = max(modifydate), @LastAccessed = isnull(@LastAccessed,'') from scormtrackings
    Data Dave : Very good! That does work!

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.