SQLで日付時刻の6分刻み文字を作る

日付時刻の6分刻み文字を作る
 
10分刻み、6分刻み といった時間枠の箱の中の イベント発生件数や 合計値を求めるために、
Where 発生時刻 >= '2017/10/07 09:06:00' and 発生時刻 < '2017/10/07 09:12:00'
とやると 実行時間が恐ろしく長くなる
 
これを回避するには、時刻を 刻み分単位に揃えて、 Group By で集計すると 実行を早くできる。
そのためには、イベント発生時刻 を 日付時刻タイプから 6分の剰余を引き算した文字列が必要になる。
 
日付のCONVERT SUBSTRING の 大売出しみたいなコードになりました。
/****** SSMS の SelectTopNRows コマンドのスクリプト ******/
SELECT getdate() as 日付
,CONVERT(VARCHAR,GETDATE(),112) as 日付文字
,convert(varchar,getdate(),108) as 時刻文字
,LEFT(convert(varchar,getdate(),108),2) as 時文字
,substring(convert(varchar,getdate(),108),4,2) as 分文字
,convert(int,substring(convert(varchar,getdate(),108),4,2)) as 分数字
,convert(int,substring(convert(varchar,getdate(),108),4,2)) % 6 as 分の6剰余
,convert(int,substring(convert(varchar,getdate(),108),4,2)) - (convert(int,substring(convert(varchar,getdate(),108),4,2)) % 6) as 分の6分刻み数字
,convert(varchar,(convert(int,substring(convert(varchar,getdate(),108),4,2)) - (convert(int,substring(convert(varchar,getdate(),108),4,2)) % 6))) as 分の6分刻み文字
 
↓ これが できたコード
,convert(varchar,getdate(),112) + left(convert(varchar,getdate(),108),2) + convert(varchar,(convert(int,substring(convert(varchar,getdate(),108),4,2)) - (convert(int,substring(convert(varchar,getdate(),108),4,2)) % 6))) as 日付時刻の6分刻み文字
 
実行結果