- PR -

SqlServer2000で文字式評価

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2008/03/13
投稿数: 22
投稿日時: 2008-03-24 12:26
こんにちは。SqlServer2000で質問があります。

仮に、Sampleというテーブルがあり、A,Bというフィールドがあり、Aというフィールドの値が、二文字のアルファベットと4桁の数値からなり、Bは適当な数値からなるとします。

A:AB0001,AC0002,ZZ9999など
B:1,23456,9999など

このテーブルの出力に際して、Aの先頭二文字のアルファベットが、例えば'AA'のときBをそのまま出力し、それ以外は0を出力するということをやりたいのです。

調べてみたところ、NULLIFという関数があり、文字式が等しければNULL、それ以外は一つ目の引数に設定した値を、返す関数がみつかったので、

NULLIF( SUBSTRING( [A] , 1 ,2 ) , 'AA' )

上の値がNULLなら1、それ以外は0を返す関数を作って、仮にSampleFunctとしますが、

SELECT SampleFunc( SUBSTRING( [A] , 1 ,2 ) , 'AA' ) * [ B ]

とすれば良いのかなあと思っているのですが、微妙にオーバーヘッドが気になります。

ちょっと調べてみたのですが、文字式を0か1で評価してくれる関数はないように思えるのですが、何か良い方法はありませんでしょうか?
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2008-03-24 12:36
CASE文で良いのでは?
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-03-24 12:46
コード:
SELECT CASE WHEN SUBSTRING(A,1,2)='AA' THEN B
                      ELSE 0
            END
 FROM Sample



でいいのでは?

SUBSTRING(A,1,2)が、nullになるケースもあるのでしょうか?もしあるなら、その場合は
何を返したいですか?
未記入
常連さん
会議室デビュー日: 2008/03/13
投稿数: 22
投稿日時: 2008-03-24 13:28
CASE というのがあるのですね。CASE自体はリファレンスにあったのですが、使い方が良くわからずスルーしていました。

大変助かりました。スッキリです。
1

スキルアップ/キャリアアップ(JOB@IT)