0

nullif () の問題に直面しています。以下の 3 つのシナリオを参照してください。

シナリオ 1:

declare @val  money
declare @pctg money
select  @val = 0.00

select @pctg = nullif(@val,'')
select @pctg  
go

最初のシナリオでは、変数 @val に 0 を渡すと、@pctg 値が NULL として計算されます。@pctg 変数はさらに他の計算に使用され、null の結果になります。

シナリオ 1 の問題を解決するために、シナリオ 2 を実装しました。

declare @val  money
declare @pctg money
select  @val = 0.00

select @pctg = nullif(convert(varchar,@val),'')
select @pctg  
go

これで期待される 0 が返され、計算も問題ありません。しかし、シナリオ 3 で述べたように、空の文字列を使用してもう 1 つのテストを実行しました。

declare @val  money
declare @pctg money
select  @val = ''

select @pctg = nullif(CONVERT(varchar,@val),'')
select @pctg  
go

ここでは、null 値を返すことを期待していますが、空の文字列では最終値を null にする必要があるため、0 が返され、テストが失敗します。

シナリオ2の解決策がシナリオ3で失敗するので、誰か助けてください。

これら 3 つのシナリオすべてを処理する 1 つのソリューションが必要です。

4

2 に答える 2

0

次のようなことを試すことができます:

select isNull((r1.postalcode),600006) postalcode, r2.postalcode
from ((select nullif(postalcode,' ') postalcode from customer )) r1 
right outer join customer r2 
on r1.postalcode=r2.PostalCode
于 2014-04-29T05:20:11.383 に答える