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

Mik*_*rie 1 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Ode*_*ded 6

LENISNULL不需要检查.

ISDATE并且ISNUMERIC将返回0值是否NULL还是空的,所以这仅仅是没有必要的.可能有人额外谨慎......

这些可以写成:

case when ISDATE(INVOICE.INVOICE_DATE) = 1 
    then convert(datetime,INVOICE.INVOICE_DATE)
    else null end
Run Code Online (Sandbox Code Playgroud)

和:

case when ISNUMERIC(SHIPMENT.NET_AMOUNT_DUE) = 1
   then convert(money,SHIPMENT.NET_AMOUNT_DUE) 
   else null end
Run Code Online (Sandbox Code Playgroud)