7

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

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

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

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

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

吉利比

4

5 回答 5

8

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

SELECT CAST(offer_start_date AS datetime) FROM [ODS].[macaclient_offers]
于 2012-06-18T11:25:00.817 回答
3

您的示例选择语句试图将 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
于 2012-06-18T11:24:53.870 回答
2

在我的情况下,价值是 a varchar

如果值为 a varcharof datetime2, like '2018-10-24 12:06:29.6112233',则先将其转换为 a datetime2,然后再转换为 a datetime

select cast(cast('2018-10-24 12:06:29.6112233' as datetime2) as datetime)
于 2018-10-24T17:00:19.670 回答
1

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

感谢所有帮助过的人

于 2012-06-18T12:30:15.983 回答
0

convert(datetime, convert(varchar(4),datepart(year,table_field))+'-'+ convert(varchar(2),datepart(month,table_field))+'-'+ convert(varchar(2),datepart (dd,table_field )) ) 当 table_field 为 datetime2 类型时

于 2019-02-07T22:36:08.313 回答