2011-05-04 269 views
1

我正在將一個查詢從Oracle遷移到sql server.That查詢包含一些日期計算。它會計算小時內的總工作時間:mi格式。您可以幫我轉換它,因爲Datediff不包含HH:Mi格式,我是新的SQL服務器,所以我不知道如何在Mssql中工作該查詢,除了Mod,以下查詢中的所有功能,我在mssql中創建的。日期計算爲TSQL中的HH.Mi格式

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') 

回答

0

這絕對不是港口聲明。所以,如果我不得不這樣做,我vould在其組件採取的聲明除了開始:

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'))

,然後試圖打破各那些爲更小的部分。

TO_CHARTO_DATE可以通過使用TSQL convert(### as datetime)cast(### as varchar)

TRIMTRUNCMODMINMAX你應該能夠在TSQL找到等價物來完成。

Transact-SQL參考找到here

0

當我嘗試將Oracle查詢遷移到sql時,我遇到了與HH:MI格式相同的問題。我發現了以下解決方法:

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

如果我理解您的權利,您希望獲得員工在此期間工作的總時間。 如果你有記錄的開始日期時間和結束日期時間,你可以使用datetime-datatype的數學。

如果你想獲得一天的工作時間,只是這樣做:

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

的datetime數據類型是一個數字,在1900年1月1日發呆。因此,如果日期時間值相差6小時,那麼您將得到1900-01-01 06:00:00:00。

你可以將它轉換爲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