除了ISDATE之外,检查LEN和ISNULL是否有用?

时间:2012-05-14 15:10:52

标签: sql-server-2008

我正在查看存储过程并看到许多行,如:

case when len(isnull(INVOICE.INVOICE_DATE,'')) > 0 
      and isdate(INVOICE.INVOICE_DATE) = 1 
    then convert(datetime,INVOICE.INVOICE_DATE)
    else null end

case when len(isnull(SHIPMENT.NET_AMOUNT_DUE,'')) > 0 
      and isnumeric(SHIPMENT.NET_AMOUNT_DUE) = 1
   then convert(money,SHIPMENT.NET_AMOUNT_DUE) 
   else null end

我不明白为什么ISNULLLEN检查总是在那里。我缺少一些好处吗?相反,对代码当前的编写方式是否有任何不利影响?

1 个答案:

答案 0 :(得分:6)

不需要LENISNULL项检查。

如果值为ISDATE或空,则

ISNUMERIC0将返回NULL,因此这不是必需的。可能有人特别谨慎......

这些可以写成:

case when ISDATE(INVOICE.INVOICE_DATE) = 1 
    then convert(datetime,INVOICE.INVOICE_DATE)
    else null end

case when ISNUMERIC(SHIPMENT.NET_AMOUNT_DUE) = 1
   then convert(money,SHIPMENT.NET_AMOUNT_DUE) 
   else null end