web-dev-qa-db-ja.com

datetime2をdatetimeとしてキャストする方法

SQLまたはSSISのみを使用して異なるソース間で標準を作成するためにdatetime2をdatetimeに変換しようとしています。例として次のSQLクエリを取り上げます。

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

次のエラーが発生します: 'データ型datetime2からtimestampへの明示的な変換は許可されていません。'

さらに、単純なキャストを使用して、datetime2を日付に変換することができました。

SQL Server 2008またはSSISを使用してdatetime2をdatetimeに変換する正しい方法は何ですか?

ギリビ

7
gilibi

OK、SSISデータ変換コンポーネントを使用してそれを達成することができました。 DT_DBTIME2またはDT_DBTIMEのいずれかを使用できることがわかりました

助けてくれたみんなに感謝します

1
gilibi

コードでtimestampにキャストしています。 datetimeに変更します。

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

サンプルのselectステートメントは、offer_start_dateを日時ではなくタイムスタンプにキャストしようとしています。

Datetime2列からタイムスタンプ値が必要な場合は、DatePart関数を使用して日付の一部を取得し、自分で作成することができます。

例えば:

declare @date datetime2
set @date = GETUTCDATE()

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

DatePart 関数へのMSDNリファレンス。

なぜそのエラーが発生するのかわかりませんが、同じ問題は発生していません。以下の例は、2008 ManagementStudioで正常に機能します。

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
3
Mike

私の場合、値はvarcharでした。

値がdatetime2のように'2018-10-24 12:06:29.6112233'varcharである場合、最初にそれをdatetime2にキャストし、次にdatetimeにキャストします。

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

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タイプの場合