سؤال

كيف يمكنني الحصول على كل مرة مثل هذا datediff(time, logindate, logoutdate)

وأنا أعلم أن هذه الوظيفة المدمجة لا تقبل حجة الوقت ولكن كيف يمكنني الحصول على الوقت كله بدلا من دقيقة، millisecond، ثانية إلخ؟

logindate datetime2
logoutdate datetime2

أريد شيئا مثل 1:05:45 بدلا من جزء منه.

هل كانت مفيدة؟

المحلول

جرب هذا

create table dbo.UserLog (UserID VARCHAR(32),loginDate DATETIME,logoutDate DATETIME)

insert into userLog VALUES ('SPARKY','11/14/2009 3:25pm',getDate())
insert into userLog VALUES ('JANNA','11/14/2009 10:45am',getDate())

select UserId,loginDate,logoutDate,
    convert(varchar(12),dateAdd(mi,datediff(mi,logindate,logoutdate),'Jan  1 1753 12:00AM'),114) as timeSpent
FROM userLog

في الأساس، إضافة اختلاف الدقائق بين التواريخ إلى أقرب تاريخ SQL صالح وإرجاع القيمة المنسقة كوقت.

نصائح أخرى

أن يكون هناك اختلاف في الأيام:

select cast(logoutdate - logindate as float) from table_name

أو فقط

select logoutdate - logindatefrom table_name

يمكنك تقييم الأيام والساعات والدقائق منه.

تعديل

أن يتم تنسيقها كوقت:

SELECT CONVERT(VARCHAR,DATA_KOSZTU - DATA_OST_ZMIANY,108) FROM TR_KOSZT

ستعمل إذا لم يتم تسجيل دخول المستخدمين لأكثر من 24 ساعة، لأن التحويل يستخدم لتنسيق DateTime، وليس TimeSpan.

لأن MSSQL لا تملك Datatype Timepsan، datediff عودة عدد صحيح مطلق من مللي ثانية إلى سنوات يجب أن تكون كافية بالنسبة لك لخلق مثيل للقول TimeSpan في الشباك.

ما إصدار SQL Server الذي تتحدث عنه؟ في SQL Server 2000 والإصدارات الأحدث، على الأقل،

SELECT datediff(ss,'2006-11-10 05:47:53.497','2006-11-10 05:48:10.420')

سوف تعطيك الفرق بين هذين التاريخين في ثوان.

على سبيل المثال، حدد تحويل (varchar (10)، getdate ()، 108)

إليك الحل الذي تبحث عنه.


DECLARE @Date1 datetime
DECLARE @Date2 datetime 
SET @Date2 = '2006-11-15 07:26:25.000'
SET @Date1 = '2009-11-15 05:35:45.000'
--            -----------------------
-- Math done by hand      1:50:40
--
DECLARE @TotalSeconds bigint
DECLARE @Hours        bigint
DECLARE @Minutes      bigint
DECLARE @Seconds      bigint
DECLARE @HH           varchar(20)
DECLARE @MM           varchar(2)
DECLARE @SS           varchar(2)
DECLARE @Result       varchar(50)
--
SET @TotalSeconds = datediff(ss,@Date1 ,@Date2)
SET @Hours        = FLOOR(@TotalSeconds / 3600)
SET @TotalSeconds = @TotalSeconds % 3600
SET @Minutes      = FLOOR(@TotalSeconds / 60)
SET @Seconds      = @TotalSeconds % 60  
--
SET @HH = CAST(@Hours   as varchar)
SET @MM = CAST(@Minutes as varchar)
SET @SS = CAST(@Seconds as varchar)
IF @Minutes < 10 SET @MM = '0' + @MM
IF @Seconds < 10 SET @SS = '0' + @SS
--
SET @Result = @HH + ':' + @MM + ':' + @SS
SELECT @Result


مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top