スケジューリング システムで開いている時間ブロックを特定しようとしていますが、ブロックの説明が 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 に対してこのコードを実行すると、正常に実行されます。
アドバイスをお願いします。