带有ISNULL的SQL查询不会将smalldatetime输出为101格式

时间:2012-06-22 23:09:53

标签: casting sql-server-2008-r2 isnull smalldatetime

SQL查询的片段(使用SQL Server 2008 R2):

, CONVERT (VARCHAR(10), s.ENTER_DATE, 101) "Enrollment Start Date"

, CONVERT (VARCHAR(10), (ISNULL(CAST(s.LEAVE_DATE AS VARCHAR(10)), '')) ,101) "Enrollment Drop Date"

顶行可以正常输出日期为适当的101格式(例如:06/22/2012)。

底线可以根据需要删除空白的任何NULL值, ...对于任何日期值,它不会将该日期输出为正确的101格式,而是输出日期默认格式(例如:2012年6月22日)。

我玩过代码并在网上搜索但我无法获得理想的结果。

有人可以建议解决方案吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

你的第二个表达式评估如下:

  1. datedatetime值转换为字符串(使用CAST()

  2. ISNULL()如果不是NULL则返回相同的结果(相同的字符串)。

  3. 字符串转换为...字符串(这次使用CONVERT())。

  4. 因此,正如您所看到的,由于最里面的转换,您会得到格式错误的日期。

    我认为你需要以不同的方式应用ISNULL。可能是这样的:

    ISNULL(CONVERT (VARCHAR(10), s.ENTER_DATE, 101), '') "Enrollment Start Date"