T-SQLのスカラー関数のスクリプティングについてこの質問をすることができますか?コールセンターから、各コールの開始時間と継続時間を含むデータがあります。私は、呼び出しの終了時刻を出力する関数を作成したいと思います。ここでは、データのサンプルです:SQL実行時間に基づいて終了時間を計算する機能
CALLID EMPLOYEE_ID START_TIME DURATION STATUS
-------- ---------- ----------------------- ------------ ------------
796544 205285 2016-07-29 19:29:02.000 00:00:27 Complete
796543 205284 2016-07-29 19:25:31.000 00:02:31 Complete
796542 205284 2016-07-29 19:22:01.000 00:00:50 Complete
796541 205285 2016-07-29 19:11:58.000 00:00:21 Complete
796540 205285 2016-07-29 19:07:40.000 00:02:16 Complete
私は動作するはずだと思う機能を作成しましたが、それは常に、それには何も追加せずに開始時刻を返します。私は[DURATION](varchar)を解析し、秒単位で時間を計算し、開始時間にそれを加算します。以下はその外観です:
ALTER FUNCTION [dbo].[AddDuration] (@Duration varchar(8), @StartTime datetime)
RETURNS datetime
BEGIN
DECLARE @Hours int = CONVERT(int,SUBSTRING(@Duration,1,2))
DECLARE @Minutes int = CONVERT(int,SUBSTRING(@Duration,4,2))
DECLARE @Seconds int = CONVERT(int,SUBSTRING(@Duration,7,2))
DECLARE @EndTime datetime
SET @EndTime = DATEADD(SECOND,(@Hours * 60 * 60) + (@Minutes * 60) + @Seconds, @StartTime)
RETURN (@EndTime)
END
私は何が欠けていますか?私はSELECT
の文の中でまったく同じロジックを実行すると、完全に動作します。しかし、機能はありません。
SELECT [START_TIME]
, [END_SELECT] = (DATEADD(SECOND,
(CONVERT(int,SUBSTRING(DURATION,1,2))*60*60)
+ (CONVERT(int,SUBSTRING(DURATION,4,2))*60)
+ (CONVERT(int,SUBSTRING(DURATION,7,2)))
, START_TIME)
)
, [END_FUNCTION] = dbo.AddDuration(DURATION,START_TIME)
START_TIME END_SELECT END_FUNCTION
----------------------- ----------------------- -----------------------
2016-08-25 09:21:00.000 2016-08-25 09:24:55.000 2016-08-25 09:21:00.000
2016-08-25 09:26:00.000 2016-08-25 09:31:22.000 2016-08-25 09:26:00.000
ありがとうございました!
60 = 3600 :) –
おっと* 60! :) 一定。 –
ああ、私はそれを理解したと思います!私は関数定義でvarcharフィールド(8)の長さを指定しませんでした。私はこの記事でそれをすることを思い出しましたが、後で私のコードを読んだとき、私はその不一致に気付きました。しかし、簡単な方法を教えてくれたゴードンに感謝します!デュレーション文字列をdatetimeとしてキャストすることが可能であることはわかりませんでした。 –