1

null 値の可能性に対応するために変更する必要がある既存の case ステートメントを変更するのに助けが必要です。

現在、声明は次のとおりです。

CASE WHEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
   DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  ELSE NULL END 
AS Days_Past_Due

null の table.OpenDate フィールドを処理できるように既存の CASE ステートメントを変更し、Days_Past_Due として NULL を返したいだけです。これを行う簡単な方法はありますか?

ありがとう!!!

4

3 に答える 3

4

式をより複雑にする代わりに、単純化する必要があります。

CASE WHEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
  DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  END 
AS Days_Past_Due
  1. CASE .. ELSE なしでは、ELSE 分岐に対して暗黙的に NULL が返されます。
  2. いずれかまたは両方の日付が NULL の Datediff は NULL を返します。特別な魔法は必要ありません。このSQL フィドルを確認してください
于 2012-11-03T21:56:37.627 に答える
0

次のようなものを試してください:

CASE 
  WHEN table.OpenDate IS NULL THEN NULL
  WHEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN 
   DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
  ELSE NULL 
END AS Days_Past_Due
于 2012-11-03T20:39:49.553 に答える
0

-- CASE に行を追加して NULL table.OpenDate を処理し、NULL としてレンダリングします。

CASE
 WHEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer) > 0 THEN DATEDIFF(dd, table.OpenDate, GetDate()) - table.Days_as_Integer 
 WHEN table.OpenDate IS NULL THEN NULL
 ELSE NULL
END 
AS Days_Past_Due
于 2012-11-03T20:44:15.137 に答える