|
|
|
Ten Centuries
      
Group: General Forum Members
Last Login: Today @ 3:12 PM
Points: 1,060,
Visits: 4,168
|
|
| Option 6 fooled me too - but I'm always glad to learn more about the differnces between ISNULL and COALESCE, since they often appear to be interchangeable!
|
|
|
|
|
Mr or Mrs. 500
      
Group: General Forum Members
Last Login: Thursday, January 17, 2013 2:34 PM
Points: 565,
Visits: 360
|
|
majorbloodnock (11/9/2009)
Which of these seven queries will return "Date is Null"? (select all that apply) Was that a zero-based list?   Noticed that, but since the PRINT statements utilize 1 through 8, the answer is clear .
Nice question, John!
|
|
|
|
|
Hall of Fame
       
Group: General Forum Members
Last Login: Friday, March 15, 2013 2:43 PM
Points: 3,924,
Visits: 1,554
|
|
Interesting question.
I got it right just because I executed it in SSMS and saw results. But without executing I would had selected option 6 also.
SQL DBA.
|
|
|
|
|
SSCoach
         
Group: General Forum Members
Last Login: Yesterday @ 1:07 PM
Points: 18,733,
Visits: 12,332
|
|
|
|
|
|
UDP Broadcaster
      
Group: General Forum Members
Last Login: Wednesday, April 17, 2013 10:57 PM
Points: 1,491,
Visits: 3,008
|
|
Michael Poppers (11/9/2009)
majorbloodnock (11/9/2009)
Which of these seven queries will return "Date is Null"? (select all that apply) Was that a zero-based list?   Noticed that, but since the PRINT statements utilize 1 through 8, the answer is clear  . Nice question, John! Major: After doing a Homer Simpson impression ("Doh!"), I had to laugh. Even after re-reading several times, I missed that (seven vs eight). I guess that's why we are taught to have others review our work.
Michael (and others), Thank you for the positive feedback. I probably should have mentioned in the "Explanation" that the easiest way to see the full picture is to run the script after switching to "Results to Text".
------ edit: minor typo: "picture", not "pecture".
|
|
|
|
|
Right there with Babe
      
Group: General Forum Members
Last Login: Tuesday, December 07, 2010 12:55 AM
Points: 771,
Visits: 504
|
|
Nice question. It really got me thinking (and on a Monday, too!)
|
|
|
|
|
Forum Newbie
      
Group: General Forum Members
Last Login: Thursday, May 02, 2013 6:13 AM
Points: 5,
Visits: 86
|
|
About the author's discussion of Option 5...
"Option 5 is am especially delicious failure in that it looks just like the sucessful option 3, only using ISNULL instead of COALESCE. It fails because the value that ISNULL will substitute for a found NULL must be the same (or capable of being implicitly converted to the same) datatype as the tested value. The COALESCE function does not enforce datatyping, so Option 3 works as is, but in a broader scope, one should beware of how the output of the COALESCE is used -- it may still subsequently encounter a datatype mis-match "
To me, it seems like this is implying that COALESCE doesn't type-check, but the examples don't compare apples to apples.... "The successful Option 3" looks like this:
coalesce(convert(char(10),@MyDate,101),'Date is Null')
... the use of CONVERT means both parameters to COALESCE are varchars. Option 3 doesn't skip type-checking - the (base) types just happen to be the same. Try it like this:
coalesce(@MyDate,'Date is Null')
... and you get the same error the IsNull in Option 5 gives.
|
|
|
|
|
UDP Broadcaster
      
Group: General Forum Members
Last Login: Wednesday, April 17, 2013 10:57 PM
Points: 1,491,
Visits: 3,008
|
|
Christopher,
You're absolutely right. I feel a bit embarrassed, but have to agree. Your counter example is actually in the list as option 1, so I have no excuse.
So, it looks as though the one difference is how ISNULL will use a stricter version of the first element's data description, truncating the contents of the second element to that length. Compare successful option 3 with truncated option 6:
Select coalesce(convert(char(10),@MyDate,101),'Date is Null') --returns 'Date is Null' Select isnull(convert(char(10),@MyDate,101),'Date is Null') --returns 'Date is Nu'
Even though the CONVERT specifies 10 characters in both, only the ISNULL truncates the literal message.
Thank you again for pointing out my confusion with option 5.
|
|
|
|