3

2つの日付列の間の期間を見つけたいです。このために、DATEDIFF関数を使用して、年と月の数値を別々に検索しましたが、両方の結果を1つの列に表示したいと思いました。2つの列を以下に示します。

start_dt      |    end_dt
06-Oct-2009      15-Jul-2011  

必要な結果

Duration(years.months)
2.3
4

8 に答える 8

9

あなたが言及した形式で結果を提供するためのすぐに使えるAPIはないと思います。関数を使用して、DATEDIFF必要な最小金種の差を取得し、結果を適切な値で除算して、必要な形式で期間を取得する必要があります。このようなもの:

DECLARE @start DATETIME
DECLARE @end DATETIME
DECLARE @duration INT

SELECT @start = '2009-10-06', @end = '2011-07-15'
SELECT @duration = DATEDIFF(mm, @start, @end)
SELECT CONVERT(NVARCHAR, @duration / 12) + '.' + CONVERT(NVARCHAR, @duration % 12)

これは、日付と最小単位を取り、必要な形式で期間を返す関数を作成することで実現できます。これには TSQL が必要であり、単純な SQL では不十分であるためです。

于 2012-10-08T04:51:58.507 に答える
2

このようなことを試してください

SELECT
    DATEDIFF( mm, start_dt, end_dt) / 12 AS years
    , DATEDIFF( mm, start_dt, end_dt) % 12 AS months
于 2012-10-08T04:56:14.957 に答える
0

This is my function for finding the difference in time between two dates.

ALTER FUNCTION functionName
-- The first imput is the start time and the second input is the end time.
@StartTime datetime, @EndTime datetime

RETURNS varchar(15)
AS
BEGIN

    DECLARE @Duration varchar(15)


SET @Duration =
convert(nvarchar(10),(COALESCE (DATEDIFF(day,@StartTime,@EndTime),DATEDIFF(day,@StartTime,CURRENT_TIMESTAMP)))) + '.' +
right('00'+ISNULL(convert(nvarchar(10),(COALESCE (DATEDIFF(hour,@StartTime,@EndTime)%24,DATEDIFF(hour,@StartTime,CURRENT_TIMESTAMP)%24))),' '),2) + ':' +
right('00'+ISNULL(convert(nvarchar(10),(COALESCE (DATEDIFF(minute,@StartTime,@EndTime)%60,DATEDIFF(minute,@StartTime,CURRENT_TIMESTAMP)%60))),' '),2) + ':' +
right('00'+ISNULL(convert(nvarchar(10),(COALESCE (DATEDIFF(second,@StartTime,@EndTime)%60,DATEDIFF(second,@StartTime,CURRENT_TIMESTAMP)%60))),' '),2)
    -- Calculates the difference in each until of time, finds the remainder, and add the pieces of the timestamp together.
    RETURN @Duration

END
于 2015-09-18T21:32:39.520 に答える
0
declare @StartDate datetime, @EndDate datetime
select @StartDate = '2016-08-24 14:44:54.513',@EndDate='2016-08-24 14:48:16.173'
Select convert(varchar,CAST((@EndDate-@StartDate) as time(0))) '[hh:mm:ss]'
于 2016-08-26T04:28:46.277 に答える
0

これを試してみてください。役立つかもしれません

select cast (DATEDIFF(m,'06-Oct-2009','15-Jul-2011')/12 as varchar(25)) + '.' + cast (DATEDIFF(m,'06-Oct-2009','15-Jul-2011')%12 as varchar(25))
于 2012-10-08T05:03:36.783 に答える
0

私はこれで試しました-

    SELECT
      CONVERT(varchar,DATEDIFF(MONTH,SAKUSEITIME,KOSHINTIME)/12)+'.'
      +CONVERT(varchar,DATEDIFF(MONTH,SAKUSEITIME,KOSHINTIME)%12) Duration
    FROM MYTABLE
于 2012-10-08T05:03:58.967 に答える
0
SELECT (DATEDIFF(month, start_dt, end_dt) / 12);
于 2012-10-08T04:53:54.477 に答える