ある列の時間を元の時間 (例: 23:33:00.0000000 は 23:00 になります) で開始するように丸め、別の列の時間を次の時間 (例: 23:33) に丸める関数を作成する必要があります。 :00.0000000 は 24:00 になります)、これらの新しい値を新しい列に挿入します。How to Round a Time in T-SQL のStack Overflow でこの関数を見つけましたが、関数を実行できません。「Msg 156, Level 15, State 1, Procedure RoundTime, Line 11 Incorrect syntax near the keyword 'SELECT'.」というエラー メッセージが表示され続けます。
CREATE FUNCTION [dbo].[RoundTime] (@Time datetime, @RoundTo float)
RETURNS datetime
AS
BEGIN
DECLARE @RoundedTime smalldatetime
DECLARE @Multiplier float
SET @Multiplier= 24.0/@RoundTo
SET @RoundedTime= ROUND(CAST(CAST(CONVERT(varchar,@Time,121) AS datetime) AS float) * @Multiplier,0)/@Multiplier
RETURN @RoundedTime
END
SELECT [dbo].[RoundTime] ('23:33',0.0)
また、 SELECT dbo.roundtime('23:33',0.0) で実行しようとしましたが、まだ喜びはありません。
そのため、この関数を実行して時間を丸める方法を試してみたいと思っていましたが、実行することさえできません。とにかく、時間を最初の時点に戻すための最良の方法がわかりません。タイムスタンプから時間を抽出し、その時間を新しい列に挿入するだけでよいでしょうか? または、その場で変換してから新しい列に挿入する方法はありますか? SQL Server 2008 を使用しています。