varchar日付フィールドをdatetimeデータ型に変換する[重複]

Dec 16 2020

varcharを使用して日付/時刻を表すデータを保存するのを間違えました。今、私は次のように、varcharとして保存されているテキストデータの列を変換しようとしています。

2020-11-25T14:22:41.3539327Z

日時データ型を格納する列に。

回答

1 Larnu Dec 16 2020 at 02:49

すべてのデータがフォーマットであるyyyy-MM-ddThh:mm:ss.nnnnnnn場合、列のデータ型を変更するだけです。

ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);

そこにタイムゾーンが必要な場合は、datetimeoffset(7)代わりに使用してください。

Brad Dec 16 2020 at 02:33
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)

必要な精度に応じて、以下のリンクを使用してそれを見つけ、120をその精度に必要な数に変更できます。

https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

テーブルを修正するには、次の手順に従う必要があります。

  1. DateTimeのテーブルに新しい列を追加します
  2. 上記のConvertを使用してテーブルの更新を実行し、varcharフィールドから変換された値で新しい列を更新します。
  3. 次に、varcharデータを含む列を削除します。

上で概説した手順を実行するためのコード

ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME

-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)


ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL