2012-04-11 49 views
0

我一直在谷歌搜索了一個多小時,沒有任何運氣。將MySQL時間戳字段轉換爲SQL Server 2005日期字段

通過CSV將數據庫導入到MS SQL Server 2005中,其中Tstamp(時間戳)字段一直困擾着我。

如何將tstamp字段轉換爲SQL日期字段?

Select *, 
    DATEADD(SECOND, field8047, 1970/01/01) as datetime_created_calc 
    From [Majestic].[dbo].[hdiyouth] 

新錯誤消息:消息8116,級別16,狀態1,行1個 參數數據類型爲varchar爲DATEADD函數的參數2無效。

+0

我想你只需要'DATEADD(秒,<秒數> 0)'。如果秒數太大。把它分成幾塊,先加上日子,再加上秒。 *('x /(60 * 60 * 24)'獲得天數。'x%(60 * 60 * 24)'獲得秒數。)* – MatBailie 2012-04-11 13:15:14

+0

嘗試了您的建議,得到以下錯誤消息: Msg 321,Level 15 ,狀態1,行3 「SECONDS」不是公認的表格提示選項。如果它的目的是作爲表值函數的參數,請確保將數據庫兼容模式設置爲90. – hermanvn 2012-04-11 13:18:27

+0

嘗試'SELECT DATEADD(SECONDS,[hdiyouth]。[Tstamp],0)FROM [Majestic]。[dbo [hdiyouth]']。 (或者不管你的TSamp字段被調用)。 – MatBailie 2012-04-11 13:25:32

回答

2

我想field8047是varchar字段。

試試這個:

Select *, 
    DATEADD(SECOND, cast(field8047 as int), '19700101') as datetime_created_calc 
    From [Majestic].[dbo].[hdiyouth] 
+0

魔法的東西!謝謝,這是一個! – hermanvn 2012-04-11 13:53:29

1

假設您有一個表示數字類型的VARCHAR(),並且該數字類型表示固定日期的秒數。

將您的VARCHAR()轉換爲數值類型。

然後在DATEADD()中使用該數字。

如果數字太大,請將其分解爲DAYS和SECONDS。

SELECT 
    DATEADD(
    DAYS, 
    CAST([hdiyouth].[Tstamp] AS BIGINT)/(60*60*24), 
    DATEADD(
     SECONDS, 
     CAST([hdiyouth].[Tstamp] AS BIGINT) % (60*60*24), 
     0 
    ) 
) 
FROM 
    [Majestic].[dbo].[hdiyouth] 

如果它做出正確的時間,但錯了日期,0改變任何日期的時間戳應該以此爲基礎。

+0

錯誤消息:消息102,級別15,狀態1,行6 ''附近的語法不正確。 SELECT DATEADD( DAYS, CAST([hdiyouth] [field8047] AS BIGINT)/(60 * 60 * 24), DATEADD( 秒, CAST([hdiyouth] [field8047] AS BIGINT)* (60 * 60 * 24),) ) 從 [Majestic]。[dbo]。[hdiyouth] – hermanvn 2012-04-11 13:45:49

+0

解決了感謝所有的麻煩! – hermanvn 2012-04-11 13:54:17

0

將您的字段轉換爲整數。

Select DATEADD(SECOND, CAST(field8047 AS INTEGER), '1970/01/01') 
Select DATEADD(SECOND, CAST('60' AS INTEGER), '1970/01/01') 
+0

確保你有引號或你的日期。 – MatBailie 2012-04-11 13:39:01

+0

編輯 - 添加報價 – Virus 2012-04-11 13:41:39

+0

關閉,但下面的一個工作就像一個魅力!謝謝 – hermanvn 2012-04-11 13:53:56

相關問題