T-SQL Dateformat // Timespan

时间:2016-06-22 08:04:28

标签: sql tsql

在我的vb.net应用程序中,我使用以下代码来获取TimeSpam格式DD:hh:mm(天数小时分钟),以向用户显示从创建条目到现在的时间。

Dim a As DateTime = DatatableRow.Item("CreateDate") '(DateTime)
Dim waitTime As TimeSpan = DateTime.Now - a
GridviewRow.Cells(1).Value = waitTime.ToString("d\:hh\:mm")

由于我的GridView越来越多地在没有DataSource的情况下工作(我总是应该使用它)变得非常慢。所以我决定在选择时计算数据库中的所有内容。

现在我使用SQL Select命令的以下部分来计算Timespan:

CONVERT(varchar,('" & Now & "'-CreateDate),108)
' Example sql: 
' select CONVERT(varchar,('" & Now & "'-CreateDate),108) as TimeDif from table_XY

108代表格式。在this页面上,我找到了一个表格,它显示了我可以使用的所有DateTime格式。这是德国人,但你会理解这张桌子。

DD:hh:mm没有(或者我没有看到它?)格式。有没有办法自定义格式,所以它符合我的要求?

解决方案

Select *,
(SELECT 
Convert(varchar,DATEDIFF(MINUTE, CreateDate,@now)/(60*24)) 
+':'+ 
RIGHT('00' + Convert(varchar,DATEDIFF(MINUTE,CreateDate,@now)%(60*24)/60),2) 
+':'+ 
RIGHT('00' + Convert(varchar,DATEDIFF(MINUTE, CreateDate,@now)%(60*24)%60),2))
as TimeDif
from table_xy

1 个答案:

答案 0 :(得分:1)

可能有更简单的解决方案,但这应该对您有用:

select substring(convert(varchar,('" & Now & "'-CreateDate),105),0,3)
       +':'
       +substring(convert(varchar,('" & Now & "'-CreateDate),108),0,6) 
as TimeDif from table_XY

所以基本上你只需使用TSQL string functions来创建你想要的格式。

编辑:因为这是为了显示时差:

你可以自己计算一下:

declare @now datetime
set @now=GETDATE();

SELECT 
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)/(60*24)) --get days
+':'+
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)%(60*24)/60) --get hours
+':'+
Convert(varchar,DATEDIFF(MINUTE, CreateDate, @now)%(60*24)%60) --get minutes

原因是,您可以进一步格式化每个部分(前导零等)。