1

データベース内にいくつかの日時関数がありますが、日時フィールドの時間部分を取り、時間を分に変換する関数を追加する必要があります

私は2回の間の分を取得する機能を持っていますが、1回の分だけではありません。

 ALTER FUNCTION [dbo].[fn_MinutesBetween]
 ( @fStart datetime, @fEnd datetime )
 RETURNS int
 AS
 BEGIN
 RETURN DateDiff(minute, @fStart, @fEnd)

時間部分だけを取得する別のもの

 ALTER function [dbo].[fn_ReturnTimeOnly]
 (@DateTime smallDateTime)
 returns nvarchar(50)
as
begin
  Return substring(cast(@DateTime as varchar),12,len(@DateTime))

end

時間の分を取得するにはどうすればよいですか。たとえば、午前 1:00 は 60、午前 2:00 は 120、午後 12:00 は 720 などです。

ありがとう

4

3 に答える 3

2

コメントでdatetime から totalminuteへのリンクを受け取り 、それを使用して解決策を見つけました。

ALTER FUNCTION [dbo].[fn_ReturnMinutesOnly]
  ( @dt smalldatetime )

RETURNS int
AS
BEGIN
  RETURN DATEDIFF(MINUTE, DATEADD(DAY, DATEDIFF(DAY, 0, @dt), 0), @dt)
END
于 2013-04-12T20:44:28.200 に答える
1

時間数を取得し、int にキャストし、60 を掛けて、分数を取得し、int にキャストし、これら 2 つを加算します。

ALTER function [dbo].[fn_ReturnMinutesOnly]
 (@DateTime smallDateTime)
 returns INT
as
begin
        Return
            cast(substring(cast(@DateTime as varchar),13,2) as INT) * 60 +
            cast(substring(cast(@DateTime as varchar),16,2) as INT)
end
于 2013-04-12T20:35:10.683 に答える
0

文字列へのキャストはコストがかかります (ここでは反対のシナリオについて話しますが、概念は同じです)。代わりにこれを試してください:

DECLARE @DateTime DATETIME;
SET @DateTime = GETDATE();

SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime);

関数では、これは次のようになります。

ALTER function [dbo].[fn_ReturnTimeOnly]
(@DateTime smallDateTime)
returns INT
as
begin
  Return (SELECT DATEDIFF(MINUTE, DATEDIFF(DAY, 0, @DateTime), @DateTime));
end
于 2013-04-12T20:41:58.883 に答える