SQL Serverには、次のような値を持つvarchar列があります。
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
07/May/2012:00:06:22
他の月の日付が3文字の月に切り捨てられると仮定します。
ALTER TABLE dbo.tablename ADD newcol DATETIME;
UPDATE dbo.tablename
SET newcol = CONVERT(DATETIME,
REPLACE(LEFT(varchar_col, 11), '/', ' ')
+ ' ' + RIGHT(varchar_col, 8), 113);
確認したら、varchar_colを削除し、newcolの名前を変更してから、影響を受けるインデックスを再度追加します。
おそらく、ファイルのどこかにある日時列に適合しないデータがあります。列のvarcharまたはnavacharフィールドを持つステージングテーブルに挿入し、データを確認します。実際のテーブルにロードする前に、その一部を調整する(または不良レコードをnullにする)必要がある場合があります。
CSVを07/May/2012 00:00:00
に再フォーマットできる場合は、機能します。 SQL Serverは、日付と時刻の間のコロンを好みません。
それ以外の場合は、@ HLGEMに同意します。ステージングテーブルが必要です。
以下を試してください:
select convert(datetime,(left('07/May/2012:00:06:22',11) + ' ' +
right('07/May/2012:00:06:22',8)))
テーブル全体に対しては、次のようになります。
select convert(datetime,(left(YourColumn,11) + ' '
+ right(YourColumn,8)))
または:
select convert(datetime,stuff('07/May/2012:00:06:22',12,1,' '))
select convert(datetime,stuff(YourColumn,12,1,' '))
1-。この投稿を確認できます: https://stackoverflow.com/questions/1509977/convert-varchar-into-datetime-in-sql-server
誰かが同じ問題を抱えており、これでそれを解決できました:
DECLARE @Date char(8)
set @Date='12312009'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))
出力:
-----------------------
2009-12-31 00:00:00.000
(1 row(s) affected)
2-。同じ値を新しい列に追加する場合は、最初に
ALTER TABLE MyTable ALTER COLUMN NullCOl DATATYPE NOT NULL;
その後、あなたは作ることができます
UPDATE TABLE MyTable SET NewCol=CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2)) //replace the last part for the code that you use to convert from varchar to date.
よろしく