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に変換する正しい方法は何ですか?
ギリビ
OK、SSISデータ変換コンポーネントを使用してそれを達成することができました。 DT_DBTIME2またはDT_DBTIMEのいずれかを使用できることがわかりました
助けてくれたみんなに感謝します
コードでtimestamp
にキャストしています。 datetime
に変更します。
SELECT CAST(offer_start_date AS datetime) FROM [ODS].[macaclient_offers]
サンプルの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
私の場合、値は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)
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タイプの場合