0

スケジューリング システムで開いている時間ブロックを特定しようとしていますが、ブロックの説明が NULL かどうかを確認するしか方法はありません。

時刻はデータベースに INT として格納されるため、この case ステートメントを使用して 3 文字または 4 文字の INT を DATETIME に再構築します。

これは私のコードです。「stm」はブロックの開始時刻です。

case
when len(sd.sd_stm)=4 AND sd.sd_block_display IS NULL THEN convert(datetime,'2013-01-01 ' + substring(convert(varchar,sd.sd_stm),1,2)+':'+substring(convert(varchar,sd.sd_stm),3,2))
when len(sd.sd_stm)=3 AND sd.sd_block_display IS NULL THEN convert(datetime,'2013-01-01 ' + substring(convert(varchar,sd.sd_stm),1,1)+':'+substring(convert(varchar,sd.sd_stm),2,2))
ELSE '2013-01-01 00:00:00'
END

サンプル入力 - stm = 730 望ましい出力 - 2013-01-01 07:30:00.000 実際の出力 - 2013-01-01 00:00:00.000

私が抱えていると思われる問題は、block_displayをNULLとして評価すると、stmの値に対してnullを返すことです。block_display IS NOT NULL に対してこのコードを実行すると、正常に実行されます。

アドバイスをお願いします。

4

0 に答える 0