将MySQL时间戳字段转换为SQL Server 2005日期字段

问题描述:

我一直在谷歌搜索了一个多小时,没有任何运气。将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

我想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

假设您有一个表示数字类型的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

将您的字段转换为整数。

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