الحصول على كل الوقت
-
20-09-2019 - |
سؤال
كيف يمكنني الحصول على كل مرة مثل هذا 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