【问题标题】:how to cast datetime2 as datetime如何将 datetime2 转换为 datetime
【发布时间】:2012-06-20 08:20:20
【问题描述】:

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

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

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

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

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

吉利比

【问题讨论】:

  • 我有,但是在这种情况下我不能使用C#
  • 您已经编辑了查询,但显然错误消息不再正确 - 您仍然错误吗?

标签: sql datetime ssis


【解决方案1】:

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

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

【讨论】:

  • 我复制了错误的查询。它应该与您建议的相同,但这不起作用
  • 奇怪。它在我的测试中运行良好。 Have a look here.
  • 执行上述查询时遇到什么错误?您问题中的错误消息是指timestamp
【解决方案2】:

您的示例选择语句正在尝试将 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

【讨论】:

  • +1 有关臭名昭著的时间戳数据类型的更多信息,see MSDN
  • 对不起,我复制了错误的例子。我试过: SELECT CAST(offer_start_date AS datetime) FROM [ODS].[macaclient_offers]
【解决方案3】:

在我的例子中,值是varchar

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

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

【讨论】:

    【解决方案4】:

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

    感谢所有帮助过的人

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-01
        • 2016-11-30
        • 2011-07-31
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        相关资源
        最近更新 更多