我正在尝试将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
答案 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类型时