日期计算为SQL中的HH.Mi格式

时间:2011-05-04 07:59:00

标签: tsql sql-server-2008 plsql

我正在将查询从Oracle迁移到sql server。该查询包含一些日期计算。它以小时计算总工时:mi格式。你可以帮我转换它,因为Datediff不包含HH:Mi格式而且我是新的在SQL服务器,所以我不知道如何在Mssql.Except中工作该查询的Mod,以下查询中的所有函数,我在mssql中创建。

SELECT dbo.TRIM(dbo.TO_CHAR(dbo.TRUNC(MOD((dbo.TO_DATE (MAX (END_HOUR),'HH24.MI') -
  dbo.TO_DATE (MIN (START_HOUR),'HH24.MI'))* 24,24)),'00'))  + ':'   
+ dbo.TRIM(dbo.TO_CHAR(dbo.TRUNC(MOD((dbo.TO_DATE(MAX(END_HOUR),'HH24.MI') - 
dbo.TO_DATE(MIN (START_HOUR),'HH24.MI'))* 24* 60,60)),'00')) TOTAL_TIME   FROM MY_TABLE 
 WHERE ID_PERSON in(  307,294,291,290,292,293)   AND DS_DATE BETWEEN 
 dbo.TO_DATE ('01.03.2011', 'dd.mm.yyyy') AND dbo.TO_DATE('03.05.2011', 'dd.mm.yyyy') 

3 个答案:

答案 0 :(得分:0)

这绝对不是一个关于港口的简报。因此,如果我不得不这样做,我可以首先将其中的声明分开:

dbo.TRIM(dbo.TO_CHAR(dbo.TRUNC(MOD((dbo.TO_DATE (MAX (END_HOUR),'HH24.MI') - dbo.TO_DATE (MIN (START_HOUR),'HH24.MI'))* 24,24)),'00'))

dbo.TRIM(dbo.TO_CHAR(dbo.TRUNC(MOD((dbo.TO_DATE(MAX(END_HOUR),'HH24.MI') - dbo.TO_DATE(MIN (START_HOUR),'HH24.MI'))* 24* 60,60)),'00'))

然后尝试将每个细分为更小的部分。

可以使用TSql TO_CHARTO_DATE

完成convert(### as datetime)cast(### as varchar)

TRIMTRUNCMODMINMAX您应该能够在TSql中找到等价物。

找到Transact-SQL引用here

答案 1 :(得分:0)

当我尝试将Oracle查询迁移到sql时,我遇到了与HH:MI格式相同的问题。我找到了以下解决方法:

CAST(CAST(getdate() as time(0)) as varchar(5)) "Time inn HHMI format"

答案 2 :(得分:0)

如果我理解正确,您希望获得员工在此期间工作的总时间。 如果你有开始日期时间和结束日期时间的记录,你可以在datetime-datatype上使用数学。

如果您想获得一天的工作时间,请执行以下操作:

select time1, time2, convert (varchar(8),time2-time1,108) from timecalc

datetime数据类型是一个数字,盯着1.1.1900。因此,如果datetime-values相差6小时,则会得到1900-01-01 06:00:00.000。

您可以将其转换为varchar以使用它并获得小时和分钟,例如我发布的06:00:00示例。

要使用分钟和秒,请使用:

dateadd()


Convert(type, value, format)

型:

Convert(Varchar(8),date, 108)

有关格式的详细信息: http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx