8

私は SQL Server 2012 で作業しています。データ セットの日付列は次のようになります41547。コラムは にありnvarchar (255)ます。次のようなものに変換したい: yyyy-mm-dd hh:mm:ss(例: 2013-09-14 12:23:23.98933090)。しかし、私はこれを行うことはできません。私は次のコードを使用しています:

select convert(datetime, date_column, 6)

しかし、これは次のエラーを出しています:

Msg 241, Level 16, State 1, Line 1 Conversion failed when converting
date and/or time from character string.

私は何を間違っていますか?

4

5 に答える 5

13

日付は実際には数値 (float または integer) であり、char 列に格納されます。floatしたがって、最初に次のように数値 (この場合は ) に変換する必要があります。

select convert(datetime, CONVERT(float,date_column))

の値は次の41547.5ようになります。

`2013-10-02 12:00:00`

あなたの場合、スタイル引数は、6char型から、またはchar型に変換する場合にのみ必要です。この場合は不要であり、無視されます。


注意: float 値は からの日数1900-01-01です。

select convert(datetime, CONVERT(float,9.0))=> 1900-01-10 00:00:00; と同じselect dateadd(day,9.0,'1900-01-01')です。

数値の小数部分も日数に相当します。0.5半日 / 12 時間も同様です。

select convert(datetime, CONVERT(float,.5))=> 1900-01-01 12:00:00. (ここでの dateadd との比較は意味がありません。これは浮動小数点ではなく整数のみを扱うためです)。

于 2013-10-09T11:43:57.597 に答える
1

これを行う方法を見つけました。

最初に nvarchar を int に変換し、次に日時に変換する必要があります。次のコードを使用しました:

Select convert(datetime, (convert (int, [date_column])), 6) as 'convertedDateTime' from mytable
于 2013-10-09T11:47:16.507 に答える
1

もっと簡単にできる方法もあります。

select convert(date,cast (date_Column+ 19000000 as nvarchar(10)))
    as date_Column_Formated
  from table_Name
于 2014-12-11T01:48:50.070 に答える