web-dev-qa-db-ja.com

varchar列をdatetimeに変換する

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
  • この列を実際の日時を含む日時列に変換するにはどうすればよいですか?
  • これが不可能な場合、新しい列を作成し、この値を日付時刻値としてコピーするにはどうすればよいですか?
4
dublintech

他の月の日付が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の名前を変更してから、影響を受けるインデックスを再度追加します。

8
Aaron Bertrand

おそらく、ファイルのどこかにある日時列に適合しないデータがあります。列のvarcharまたはnavacharフィールドを持つステージングテーブルに挿入し、データを確認します。実際のテーブルにロードする前に、その一部を調整する(または不良レコードをnullにする)必要がある場合があります。

4
HLGEM

CSVを07/May/2012 00:00:00に再フォーマットできる場合は、機能します。 SQL Serverは、日付と時刻の間のコロンを好みません。

それ以外の場合は、@ HLGEMに同意します。ステージングテーブルが必要です。

3
JHFB

以下を試してください:

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,' '))
2
datagod

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.

よろしく

2
jcho360