2

SQL Server データベースに日付フィールドを含むテーブルがあり、varcharyyyymmddhhnn形式 (nn分) として表示されます。たとえば、 に200012011200なります01 Dec 2000 12:00datetimeこれを値に変換する必要がありますが、convertどのコードもそれをカバーしていないようです。ISO形式に最も近いですyyyymmddが、時刻部分が含まれていないため、呼び出しconvert(datetime, MyDateField, 112)は失敗します。

時間の部分は重要なので、簡単には剥がせません。これを日時に変換するにはどうすればよいですか?

4

3 に答える 3

0

私自身のかなり強引な解決策:

dateadd(mi, cast(substring(MyDateTime, 11, 2) as int), dateadd(hh, cast(substring(MyDateTime, 9, 2) as int), convert(datetime, left(MyDateTime, 8), 112)))

恐ろしい仕掛けですが、それは仕事をします。内から外への内訳:

convert(datetime, left(MyDateTime, 8), 112)

最初の 8 文字 ( yyyymmdd) を取得し、ISO 形式に変換します。

dateadd(hh, cast(substring(MyDateTime, 9, 2) as int), ...)

- 文字 9 と 10 で時間を追加しますが、で使用する前dateaddにキャストする必要があります。intdateadd

dateadd(mi, cast(substring(MyDateTime, 11, 2) as int), ...)

同じ方法で文字 11 と 12 の分を追加します。

意図的に難読化しない限り、このソリューションがこれ以上醜いものになるとは想像できません。また、非常に効率的であるとは思えませんが、機能します。

于 2013-09-11T08:45:09.160 に答える