MS SQL ServerでHHMMSS形式のinteger型をHH:MM:SSの文字列に変換する

SysJobsなどのシステムテーブルで使用されている、時刻のフォーマットがinteger型で、HHMMSS形式で格納されている為、これをHH:MM:SSの文字列に変換する方法。

もともと、クライアント側(プログラム側C#等)のDate関数を使うことが想定されている為、SQL Server側には、変換する関数が用意されていない。

100で割っていく方法など、いろいろあるが、以下で変換可能

SELECT STUFF(STUFF(RIGHT('0000' + CAST(<対象カラム> AS VARCHAR(6)),6),3,0,':'),6,0,':') AS 'HH:MM:SS'
FROM <対象テーブル>
  • ストアドファンクションを作る
CREATE FUNCTION IntegerToHHMMSS(@intHHMMSS INT) RETURNS VARCHAR(8) AS
BEGIN
  RETURN(STUFF(STUFF(RIGHT('0000' + CAST(@intHHMMSS AS VARCHAR(6)),6),3,0,':'),6,0,':'));
END
GO 

DateTime型ではないのでConvertを使って変換はできない。

逆変換はこちら

replace(Convert (varchar(8),GetDate(), 108),':','')