如何将datetime2转换为datetime

时间:2012-06-18 11:09:23

标签: sql datetime ssis

我正在尝试将datetime2转换为datetime,以便仅使用SQL或SSIS在不同源之间创建标准 以下面的SQL查询为例:

SELECT CAST(offer_start_date AS datetime)
FROM [ODS].[macaclient_offers]

我收到以下错误: “不允许从数据类型datetime2到timestamp的显式转换。”

此外,我确实设法使用简单的演员将datetime2转换为日期。

使用SQL Server 2008或SSIS将datetime2转换为datetime的正确方法是什么?

gilibi

5 个答案:

答案 0 :(得分:7)

您正在代码中转换为timestamp。更改为datetime

SELECT CAST(offer_start_date AS datetime) FROM [ODS].[macaclient_offers]

答案 1 :(得分:3)

您的示例select语句正在尝试将offer_start_date强制转换为时间戳而不是日期时间。

如果您确实需要datetime2列中的时间戳值,您可以使用DatePart函数检索部分日期并自行构建。

例如:

declare @date datetime2
set @date = GETUTCDATE()

select @date,
       DATEPART(hour, @date),
       DATEPART(minute, @date),
       DATEPART(second, @date)

MSDN对DatePart函数的引用。

不确定为什么会收到这个错误,我没有遇到同样的问题。以下示例在我的2008 Management Studio中运行良好。

create table #temp
(
    OrderId int,
    OrderDate datetime2
)

insert into #temp
(OrderId, OrderDate)
values
(1, GetUTCDate())

select *, CAST(OrderDate as datetime)
from #temp

drop table #temp

答案 2 :(得分:1)

好的,我设法使用SSIS数据转换组件来实现这一目标。 我发现我可以使用DT_DBTIME2或DT_DBTIME

感谢所有帮助过的人

答案 3 :(得分:0)

在我的情况下,该值为varchar

如果值是varchar中的datetime2,例如'2018-10-24 12:06:29.6112233',则首先将其转换为datetime2,然后转换为datetime

select cast(cast('2018-10-24 12:06:29.6112233' as datetime2) as datetime)

答案 4 :(得分:0)

  

转换(日期时间,    convert(varchar(4),datepart(year,table_field))+'-'+     convert(varchar(2),datepart(month,table_field))+'-'+      转换(varchar(2),datepart(dd,table_field))           )   当table_field是datetime2类型时