私が与えられたタスクの一部には、いくつかの列で計算を実行することが含まれます。そのうちの 2 つは hh.mi.ss 形式で、それらは varchar です。計算を機能させるには、時間の 10 進形式にする必要があります。これにより、1:30 は 1.5 になります。現在 SQL Server 2005 を使用しているため、時間やデータ型が組み込まれておらず、アップグレードされたバージョンを取得できません (私の選択ではありません)。私が持っているものを使って、オンラインで検索して変換しようとしましたが、結果は正確ではありません。たとえば、13.28 は (大まかに) 13.5 になりますが、秒は 60 で終わるのではなく 100 になります (フロートに変換しているため)。
たとえば、12.57.46 を使用すると、
CAST(DATEPART(HH, CAST(REPLACE([OASTIM], '.', ':') AS DATETIME)) AS FLOAT) +
(CAST(DATEPART(MI, CAST(REPLACE([OASTIM], '.', ':') AS DATETIME)) AS FLOAT)/60) +
(CAST(DATEPART(SS, CAST(REPLACE([OASTIM], '.', ':') AS DATETIME)) AS FLOAT)/3600)
私に12.962をくれました...
一方
CAST(SUBSTRING([OASTIM], 1, 2) AS FLOAT) +
((CAST(SUBSTRING([OASTIM], 4, 5) AS FLOAT) +
CAST(SUBSTRING([OASTIM], 7, 8) AS FLOAT)/60)/60)
私に12.970をくれました....
そして、もっと簡単なことを試したとき、
DATEPART(HOUR, CAST(REPLACE([OASTIM], '.', ':') AS DATETIME))+
(DATEPART(MINUTE, CAST(REPLACE([OASTIM], '.', ':') AS DATETIME))/60)
フロップアウトして、12しかくれなかった
Windows SQL と T-SQL に初めて触れたので、数時間苦労しました。恐ろしく聞こえるかもしれませんが、パフォーマンスが犠牲になることを意味しても、私はそれが機能することに満足するところまで来ています。